Я должен создать URL динамично согласно текущему URL. Используя {% url %}
тег является самым легким способом сделать это, но мне нужно текущее имя URL для генерации нового динамично.
Как я могу получить имя URL, присоединенное к urlconf, который приводит к текущему представлению?
РЕДАКТИРОВАНИЕ: Я знаю, что могу вручную изготовить вручную использование URL get_absolute_url
но я избежал бы его, так как это - часть лекции, и я хотел бы продемонстрировать только один способ создать URL.
Студенты знают, как использовать {% url %}
. Они, знают направление с проблемой, когда они должны генерировать более полный URL на основе текущего. Самый легкий путь состоит в том, чтобы использовать {% url %}
снова, с некоторыми изменениями. Так как мы назвали URL, мы должны знать, как получить название URL который названный текущим представлением.
РЕДАКТИРОВАНИЕ 2: другой вариант использования состоит в том, чтобы отобразить части основного шаблона différently согласно основному шаблону. Существуют другие способы сделать это (использование CSS и {% блока %}, но когда-то это просто хороший смочь удалить тег записи меню base.html, если viewname соответствуют ссылке.
Это немного неясно из вашего вопроса, но http://docs.djangoproject.com/en/dev/topics/http/urls/ , вероятно, даст объяснение тому, что вам нужно.
Особенно полезно отметить, как Django обрабатывает запросы:
Когда пользователь запрашивает страницу с вашего сайта на базе Django, система следует этому алгоритму, чтобы определить, какой код Python выполнить:
Если вы сразу после полного пути, вы можете попробовать:
http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.get_full_path
Надеюсь, это поможет - оно указывает, как использовать модуль URLconf, и, надеюсь, поможет указать вам правильное направление.
Разъяснение вопроса: «В представлении, как получить имя URL-шаблона, указывающего на него, при условии, что существует ровно один такой URL-шаблон. "
Это может быть желательно по указанным причинам: внутри представления нам нужен СУХИЙ способ получения URL-адреса того же представления (мы не хотим знать свое собственное имя шаблона URL-адреса).
Краткий ответ: преподавать в классе непросто, но, возможно, через час или два вам будет интересно сделать это и бросить на GitHub.
Если вы действительно хотели это сделать, вам нужно было бы создать подкласс RegexURLResolver и изменить метод разрешения, чтобы он возвращал согласованный шаблон (из которого вы можете получить имя шаблона) вместо пар представление и ключевое слово / значение. {{1 }} http: //code.djangoproject.com / browser / django / trunk / django / core / urlresolvers.py # L142
Затем вы можете создать декоратор или, возможно, более подходящее промежуточное программное обеспечение, которое использует этот подкласс для получения имени шаблона и сохранения этого значения где-нибудь в запросе, чтобы представления могут использовать это.
Если вы действительно хотите это сделать, и у вас возникнут проблемы, дайте мне знать, и я, вероятно, смогу помочь.
Для вашего класса я бы просто жестко запрограммировал имя шаблона в представлении или шаблоне. Я считаю, что это приемлемый способ сделать это.
Обновление: Чем больше я думаю об этом, тем больше мне не нравится пытаться получить имя шаблона URL в представлении. Параметры urlpattern практически не зависят от параметров представления, на которое они указывают. Если вы хотите указать на определенный URL-адрес, вам необходимо знать, как работает шаблон URL-адреса, а не только как работает представление. Если вам нужно знать, как работает urlpattern, вам также может потребоваться знать имя urlpattern.