#django #django-templates #django-views
#django #django-шаблоны #django-просмотры
Вопрос:
После разделения файла URL-адреса с нашим приложением мы сталкиваемся с проблемой:
Пример:
http://www.oursite.com/ourprefix/xyz/wsz
- Как обрабатывать URL-адреса в шаблоне (для размещения любого префикса (ourprefix) в url)
- Как выполнить HttpResponseRedirect без жестко закодированных URL-адресов (здесь также присутствует проблема с outprefix)
Комментарии:
1. Что вы подразумеваете под «обработкой» URL-адресов в шаблоне? Просто поместите их в атрибут привязки href…
2. Не могли бы вы выразиться более конкретно. Что вы должны делать с префиксом? Это должно быть просто регулярное выражение в urls.py
3. Не могли бы вы более конкретно сформулировать свой вопрос? похоже, вы добавляете языковой префикс в свои URL-адреса.
Ответ №1:
Используйте именованные URL-адреса в urls.py
.
- Используйте
{% url name %}
тег шаблона. Он вставит правильный путь. - Использовать
reverse('name', **kwargs)
для перенаправления.
пример:
в proj/urls.py:
patterns = patterns('',
(r'^prefix/', include('proj.app.urls') ),
)
в proj/app/urls.py:
patterns = patterns('',
url(r'object/^(?P<pk>d )/edit/', edit_object_view, name="edit"),
)
в proj/app/views.py:
return HttpResponseRedirect(reverse('app:edit', {'pk':pk}))
в proj/app/templates/app/my_template.py:
<a href="{% url app:edit pk=pk %}"> <!-- generates /prefix/object/123/edit/ -->
Ответ №2:
Если я вас правильно понимаю, вы хотите преобразовать конкретное представление в URL-адрес внутри шаблона?
Вы должны использовать метод обратного URL-адреса в Django. Смотрите здесь.
1) Для шаблона вы можете использовать:
<a href="/path/to/{{prefix}}/xyz"> Link </a>
Где «префикс» — это переменная, установленная в вашем контексте, которую вы передаете шаблону. Вы также можете динамически выбирать правильный URL:
{% url application.views.viewfunc parameter1 parameter2 %}
Смотрите здесь для получения более подробной информации.
2) Итак, для HttpResponseRedirect вы можете сделать:
HttpResponseRedirect(reverse(your_view_function))
Он также принимает параметры.
Комментарии:
1. Должен ли я ставить {{prefix}} самостоятельно или есть какая-то система, которая сделает это за меня? Приложение каким-то образом автоматически распознает этот префикс.
2. Вы не говорите, как вы обслуживаете этот префикс, но предполагая, что вы только что сделали это, установив псевдоним WSGI, тогда Django автоматически узнает это.