Я склонен придерживаться первого соглашения, простого подчеркивания. Я также не указываю тип в имени, потому что мне Intellisense говорит, что это такое (я знаю, это может быть опора).
Лучше всего посоветоваться с коллегами или коллегами по проекту и просто принять решение о соглашении, некоторые из них являются произвольными.
Привет, спасибо, vikingosegundo!
Я тоже люблю использовать декораторы :-). Но пока что я следую подходу, предложенному в упомянутом выше фрагменте. Единственное, используйте вместо фрагмент n. 942 , потому что это улучшенная версия оригинальной. Вот как это работает:
Представьте, что у вас есть шаблон (например, 'subtemplate.html') любого размера, который содержит полезный блок, который вы можете использовать повторно:
........
<div id="results">
{% block results %}
{% for el in items %}
<li>{{el|capfirst}}</li>
{% endfor %}
{% endblock %}
</div><br />
........
Импортируя в свой файл представления приведенный выше фрагмент, вы можете легко ссылаться в любой блок в ваших шаблонах. Замечательная особенность заключается в том, что отношения наследования между шаблонами принимаются во внимание, поэтому, если вы ссылаетесь на блок, который включает в себя другой блок, и так далее, все должно работать нормально. Итак, представление ajax выглядит так:
from django.template import loader
# downloaded from djangosnippets.com[942]
from my_project.snippets.template import render_block_to_string
def ajax_view(request):
# some random context
context = Context({'items': range(100)})
# passing the template_name + block_name + context
return_str = render_block_to_string('standard/subtemplate.html', 'results', context)
return HttpResponse(return_str)
Вот как я использую один и тот же шаблон для традиционного рендеринга и рендеринга Ajax-ответа.
Шаблон:
<div id="sortable">
{% include "admin/app/model/subtemplate.html" %}
</div>
Включенный шаблон (он же: подшаблон):
<div id="results_listing">
{% if results %}
{% for c in results %}
.....
{% endfor %}
{% else %}
Ajax-view :
@login_required
@render_to('admin/app/model/subtemplate.html')#annoying-decorator
def ajax_view(request):
.....
return {
"results":Model.objects.all(),
}
Конечно, вы можете использовать render_to_response. Но мне нравятся эти надоедливые декораторы: D
Нет причин, по которым вы не можете вернуть отрисованный бит HTML с помощью Ajax и вставить его на существующую страницу в нужном месте. Очевидно, вы можете использовать шаблоны Django для рендеринга этого HTML, если хотите.
Я не думаю, что когда вы работаете с Ajax, шаблоны можно использовать. Шаблон существует для того, чтобы вы могли легко генерировать динамический HTML на стороне сервера и, следовательно, он предоставляет несколько программных ловушек внутри HTML.
В случае Ajax вы передаете данные JSON и можете отформатировать их как хотите в Python. а элементы HTML / документа будут сгенерированы на стороне клиента с использованием JSON какой-либо библиотекой JavaScript, например jQuery на стороне клиента.
Возможно, если у вас есть очень конкретный случай замены некоторого внутреннего HTML из HTML на стороне сервера, возможно, вы можете использовать шаблоны но в таком случае зачем вам нужен JSON? Вы можете просто запросить HTML-страницу через Ajax и изменить внутренний или внешний или любой другой HTML.
Шаблоны предназначены для презентации . Ответ с данными в формате X (JSON, JSONP , XML, YAML , * ml и т. Д.) Не является представлением, поэтому вам не нужны шаблоны. Просто сериализуйте свои данные в формат X и верните их в HttpResponse.
К сожалению, шаблоны Django предназначены для выполнения только на стороне сервера. Существует по крайней мере один проект для рендеринга шаблонов Django с использованием Javascript, но я не использовал его и поэтому не знаю, насколько он быстр, хорошо поддерживается или обновлен. Помимо этого, вы должны либо использовать шаблоны Django на сервере, либо генерировать динамические элементы на клиенте без использования шаблонов.