Также возможно передать дополнительную информацию в шаблон, чтобы я мог понять, какой вид вызывается . Думаю, это не было бы изящным решением.
Уверенный, что это. Вот пример:
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 groups и как они implement a {% groupurl %}
tag. В основном это позволяет вам дублировать все URL-адреса данного приложения и передавать переменную «группа», которая используется для создания обратного поиска по URL-адресам на основе групп для URL-адресов.
спасибо. Наверное, я не мог четко объяснить. В принципе, все, что мне нужно, это получить имя URL-адреса, а затем я могу создать URL-адрес по имени, например {% url url-name%}. Я также могу сделать это, как вы сказали. Я не знал, какой из них вы предпочитаете. – pocoa
Ключевой вопрос: ** с какой целью ** вам нужно имя URL. В '{% url something%}', 'something' - это имя представления. Это не может быть переменной. Таким образом, по существу первая часть URL-адреса, то есть, вид, называемый с '{% url%}', всегда * статический. Это означает, что если вам нужно вызвать другое представление, вы никогда не сможете использовать '{% url%}'. Если нужный URL-адрес совпадает с той страницей, на которую вы смотрите, используйте '{{request.path}}'. Если нужный URL-адрес - это другой URL-адрес, совместимый с этим представлением, используйте '{{this_url}}'. –