Пример диспетчера URL-адреса Django - передача URL-адреса из представления другому - PullRequest
2 голосов
/ 13 марта 2012

У кого-нибудь есть пример с быстрым адресом? Я посмотрел документацию по Django, но обнаружил, что нет полного примера, который показывает вам, как все работает в представлениях.

В частности, я пытаюсь передать "URL" из одного представления в другое. Например, я пытаюсь создать веб-сайт, посвященный праздникам: если нажата кнопка в представлении «доступные праздники» под названием «европа», я хочу перейти на сайт www.example.com/selected/europe, где отображаются все праздники в Европе. в то время как при нажатии кнопки в доступном представлении праздников под названием «Австралия», я хочу перейти на www.example.com/selected/australia, где отображаются аналогично австралийские праздники.

Пока что в url.py у меня есть:

(r'^selected/(?P<location>\w+)/$', 'app.views.selected'),

в views.py У меня есть:

def selected(request, location)

Я не уверен, куда идти дальше. Кроме того, как происходит переход от представления «доступные праздники» к представлению «выбранные» ...

1 Ответ

4 голосов
/ 13 марта 2012

В шаблоне «Доступные праздники» необходимо указать ссылку на страницу местоположений.

Сначала добавьте аргумент «name» в определение URL:

(r'^selected/(?P<location>\w+)/$', 'app.views.selected', name='selected_holidays'),

Затем вшаблоны "доступные праздники", ссылка такова:

{% url selected_holidays 'Europe' %}

Конечно, используйте переменную местоположения, если в forloop:

{% for location in locations %}
    <a href="{% url selected_holidays location %}">{{ location }}</a>
{% endfor %}

Если местоположение является моделью, то вам следуетдобавить метод get_absolute_url в модель, например:

from django.core import urlresolvers

class Location(models.Model):
    # ... [snip]
    def get_absolute_url(self):
        return urlresolvers.reverse('selected_holidays', args=(self.location_name,))

Затем в шаблоне:

{% for location in locations %}
    <a href="{{ location.get_absolute_url }}">{{ location }}</a>
{% endfor %}

В этом случае измените имя URL-адреса с «selected_holidays» на «location_detail»если это имеет смысл - это вполне стандартно в Django.

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

{% load url from future %}

Тогда, используйте именованную строку URL с кавычками:

{% url 'selected_holidays' 'Europe' %}

Ну, я думаю, у вас есть несколько стартеров здесь.Вы также должны перечитать руководство по URL-адресам Django, чтобы знать, что и где в случае проблем :) https://docs.djangoproject.com/en/dev/topics/http/urls/

...