Также возможно передать дополнительную информацию в шаблон, чтобы я мог понять, какие
вид называется. Но это не будет элегантным решением, я думаю.
Конечно, это так. Вот пример:
def view1(request, form_class=MyForm, template_name='myapp/page.html'):
# app code here
this_url = reverse('view1')
render_to_response(template_name, locals(), RequestContext(request))
def view2(request, form_class=MyForm, template_name='myapp/page.html'):
# app code here
this_url = reverse('view2')
render_to_response(template_name, locals(), RequestContext(request))
myapp/page.html
<a href="{{ this_url }}">Webpage</a>
Вы также можете создать свой собственный URL-тег с именем, скажем, dynurl
, который принимает первый аргумент как переменную, а не как имя представления:
def view2(request, form_class=MyForm, template_name='myapp/page2.html'):
# app code here
this_view = 'view2'
render_to_response(template_name, locals(), RequestContext(request))
myapp/page.html
{% load dynurl_tags %}
<a href="{% dynurl this_view %}">Webpage</a>
Вы точно не объяснили, почему вы хотите ссылку на текущий вид. Это для того, чтобы ссылаться на ту же страницу? Есть несколько способов сделать это:
<a href="">technically this points back to the same page</a>
<a href="{{ request.path }}">this url is the full path before the query string</a>
<a href="{{ request.get_full_path }}">this url is the full path plus the query string</a>
Я думаю, что было бы полезно подумать о том, каковы ключевые различия между двумя взглядами, и придумать переменную, которая описывает их разницу. Затем используйте эту переменную в шаблоне для определения новых URL.
Для более сложных проблем вы можете посмотреть группы Pinax и как они реализуют тег {% groupurl %}
. По сути, он позволяет вам дублировать все URL данного приложения и передавать переменную «group», которая используется для создания специального обратного поиска по URL для групп.