2010-08-10 4 views
1

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

{% url url-name %} 

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

ответ

1

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

Уверенный, что это. Вот пример:

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-адресов.

+0

спасибо. Наверное, я не мог четко объяснить. В принципе, все, что мне нужно, это получить имя URL-адреса, а затем я могу создать URL-адрес по имени, например {% url url-name%}. Я также могу сделать это, как вы сказали. Я не знал, какой из них вы предпочитаете. – pocoa

+0

Ключевой вопрос: ** с какой целью ** вам нужно имя URL. В '{% url something%}', 'something' - это имя представления. Это не может быть переменной. Таким образом, по существу первая часть URL-адреса, то есть, вид, называемый с '{% url%}', всегда * статический. Это означает, что если вам нужно вызвать другое представление, вы никогда не сможете использовать '{% url%}'. Если нужный URL-адрес совпадает с той страницей, на которую вы смотрите, используйте '{{request.path}}'. Если нужный URL-адрес - это другой URL-адрес, совместимый с этим представлением, используйте '{{this_url}}'. –

1

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

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

Счастливое кодирование.

0

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

Смежные вопросы