Меню в Джанго - PullRequest
       7

Меню в Джанго

1 голос
/ 17 января 2011

Привет, я начинаю изучать Джанго.

У меня есть простой список меню

{% block menu %} 
    <ul>
    {% for item in list %}
    <li><a href="{{item}}/">{{ item }}</a></li>
    {% endfor %}
    </ul>
{% endblock %}

и список, например,

MENU = ['Home','Contact','About']

Когда янажмите «Контакт», затем перейдите по адресу 127.0.0.1:8000/, свяжитесь с тем же шаблоном, но если я снова нажму «Контакт», я получаю страницу, не найденную по адресу 127.0.0.1:8000/Contact/Contact

Что можночто с этим делать?

Извините за мой английский.

Ответы [ 3 ]

6 голосов
/ 17 января 2011

Особая проблема заключается в том, что отправляемый вами HTML-код содержит ссылки на «Контакт /», который, если вы уже находитесь по адресу / Контактному URL, перейдет в / Контакт / Контакт, как вы видите здесь.

Быстрое решение - добавить / прямо перед {{item}}, например:

<li><a href="/{{item}}/">{{ item }}</a></li>

Однако у django есть лучшие способы обработки URL-адресов, чем при их создании самостоятельно. Посмотрите документацию диспетчера URL [1], чтобы узнать, как использовать тег шаблона URL [2].

Как будет выглядеть эта строка, примерно так:

<li><a href="{% url item %}">{{ item }}</a></li>
  1. [1] http://docs.djangoproject.com/en/dev/topics/http/urls/
  2. [2] http://docs.djangoproject.com/en/1.2/ref/templates/builtins/#url
1 голос
/ 17 января 2011

Попробуйте изменить href="{{item}}" на href="/{{item}}":

(% block menu %} 
    <ul>
    {% for item in list %}
    <li><a href="/{{item}}/">{{ item }}</a></li>
    {% endfor %}
    </ul>
{% endblock %}

Вы использовали относительный URL, который не будет работать, если вы находитесь на другом уровне пути URL.

0 голосов
/ 17 января 2011

Используйте абсолютные пути, например:

MENU = [{'text':'Home',
    'url':'/home'},
    {'text':'Contact',
    'url':'/contact'},
    {'text':'Home',
    'url':'/home'}]

И код, подобный этому:

{% block menu %} 
    <ul>
    {% for item in list %}
    <li><a href="{{url}}/">{{ text }}</a></li>
    {% endfor %}
    </ul>
{% endblock %}

Но лучшим решением было бы использовать какое-нибудь готовое приложение CMS, например отсюда1007 * страница ресурсов django как django-cms (django-cms.org).

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