Получение текущего URL - PullRequest
       6

Получение текущего URL

1 голос
/ 10 августа 2010

У меня есть пара представлений, которые отображают один и тот же шаблон, и у меня есть несколько тегов {% url%} в этом шаблоне, которые должны указывать на другое местоположение на основе текущего представления. Существует ли какая-либо переменная контекста, которая дает имя представления (для именованных URL-адресов), например view-1 view-2, поэтому в моем шаблоне я могу использовать его так:

{% url url-name %}

Также возможно передать дополнительную информацию в шаблон, чтобы я мог понять, какое представление вызывается. Но это не будет элегантным решением, я думаю.

Ответы [ 4 ]

2 голосов
/ 10 августа 2010

Передайте RequestContext шаблону визуализации и напишите себе контекстный процессор для восстановления URL-адреса из запроса.

http://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext

1 голос
/ 10 августа 2010

Также возможно передать дополнительную информацию в шаблон, чтобы я мог понять, какие вид называется. Но это не будет элегантным решением, я думаю.

Конечно, это так. Вот пример:

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 для групп.

1 голос
/ 10 августа 2010

Я не думаю, что в django есть какой-либо прямой способ увидеть, какой вид отображает текущий шаблон.Таким образом, это упрощает, чтобы написать контекстный процессор (скорее увеличит сложность, чем уменьшит его), либо отправить информацию из поля зрения.

Но вместо отправки имени представления в шаблон и создания других местоположений на основе этого представления, почему бы не попробовать отправить сконструированные URL-адреса из каждого представления ??Логика принятия решений намного эффективнее в представлениях, чем в django-шаблонах.Просто предложение.

Happy Coding.

0 голосов
/ 11 августа 2010

Добавьте django-debug-toolbar в разработке, когда вам это нужно. Это показывает вам много информации о текущей отрисованной странице.

...