Если условие в шаблоне для отображения ссылки в Django - PullRequest
1 голос
/ 16 марта 2012

В моем django приложении index.html (которое я считаю home page сайта) я даю ссылки на различные местоположения на сайте. Когда пользователь достигает одного из местоположений, он должен найти ссылкутам, чтобы вернуться на домашнюю страницу. Итак, я создал base.html, который будет наследоваться всеми страницами, включая index.html. В base.html я предоставляю эти ссылки.

base.html

...
<a href="{%url archives  %}"> Archives </a>
<br/>
<a href="{% url reports   %}"> Reports </a>
<br/>
<a href="{% url home   %}"> Home </a>
<br/>
..

Моя проблема в том, что когда я на главной странице (home), я не хочу отображать домашнюю ссылку. Это возможно сделать в шаблоне, используя {% if %}состояние?В настоящее время я не передаю никаких параметров в представлении

@login_required
def index(request, template_name):
    print 'index()::template=',template_name
    return custom_render(request, {},template_name )

def custom_render(request,context,template):
    req_context=RequestContext(request,context)
    return render_to_response(template,req_context)

Ответы [ 2 ]

3 голосов
/ 16 марта 2012

Во-первых, вы можете использовать ярлык django render , чтобы избежать необходимости использовать длинные custom_render.

from django.shortcuts import render
@login_required
def index(request, template_name):
    return render(request, template_name,extra={})

Вы можете быть дерзким и в вашем base.html сделать что-то вроде:

{% url home as home_url %}
{% if request.path != home_url %}<a href="{{ home_url }}">Home</a>{% endif %}

, чтобы быстро проверить, является ли текущая страница домашней страницей.

Если в будущем это может стать более сложным, вы можете использовать тег шаблона, чтобы проверить, соответствует ли текущий URL-адрес, на котором вы находитесь, другому URL-адресу.Вот тег шаблона, который я использовал ранее, чтобы проверить, активна ли в данный момент ссылка на меню:

https://gist.github.com/2049936

1 голос
/ 16 марта 2012

Это не совсем то, что вы просили, но альтернативный способ сделать это, который я часто предпочитаю, это использовать JavaScript, чтобы либо скрыть, либо изменить цвет ссылок на текущей странице. Например, если вы использовали jQuery:

// Assumes relative paths in a elements
$('a[href="' + window.location.pathname + '"]').each(function (index, element) {
   $(element).addClass('someClass');
});

someClass может быть правилом CSS для установки атрибута «display» для этого элемента на «none» или просто для того, чтобы ссылка выглядела как обычный текст, и ведет себя как обычный текст при наведении курсора мыши или нажатии на него.

Это имеет два возможных преимущества:

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

Это не серебряная пуля, но я думаю, что важно понимать, что иногда эти вещи не обязательно лучше всего делать в шаблонах. Я думаю о своих шаблонах django прежде всего как о способе структурирования данных. В них всегда будет какой-то элемент изложения, но я стараюсь максимально его убрать. Другие не согласятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...