Обработка URL-адресов Django?

#django #django-templates #django-views

#django #django-шаблоны #django-просмотры

Вопрос:

После разделения файла URL-адреса с нашим приложением мы сталкиваемся с проблемой:

Пример:

http://www.oursite.com/ourprefix/xyz/wsz

  1. Как обрабатывать URL-адреса в шаблоне (для размещения любого префикса (ourprefix) в url)
  2. Как выполнить HttpResponseRedirect без жестко закодированных URL-адресов (здесь также присутствует проблема с outprefix)

Комментарии:

1. Что вы подразумеваете под «обработкой» URL-адресов в шаблоне? Просто поместите их в атрибут привязки href…

2. Не могли бы вы выразиться более конкретно. Что вы должны делать с префиксом? Это должно быть просто регулярное выражение в urls.py

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

Ответ №1:

Используйте именованные URL-адреса в urls.py .

  1. Используйте {% url name %} тег шаблона. Он вставит правильный путь.
  2. Использовать 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 автоматически узнает это.