Как получить текущее имя URL с помощью Django?

Я должен создать URL динамично согласно текущему URL. Используя {% url %} тег является самым легким способом сделать это, но мне нужно текущее имя URL для генерации нового динамично.

Как я могу получить имя URL, присоединенное к urlconf, который приводит к текущему представлению?

РЕДАКТИРОВАНИЕ: Я знаю, что могу вручную изготовить вручную использование URL get_absolute_url но я избежал бы его, так как это - часть лекции, и я хотел бы продемонстрировать только один способ создать URL.

Студенты знают, как использовать {% url %}. Они, знают направление с проблемой, когда они должны генерировать более полный URL на основе текущего. Самый легкий путь состоит в том, чтобы использовать {% url %} снова, с некоторыми изменениями. Так как мы назвали URL, мы должны знать, как получить название URL который названный текущим представлением.

РЕДАКТИРОВАНИЕ 2: другой вариант использования состоит в том, чтобы отобразить части основного шаблона différently согласно основному шаблону. Существуют другие способы сделать это (использование CSS и {% блока %}, но когда-то это просто хороший смочь удалить тег записи меню base.html, если viewname соответствуют ссылке.

81
задан ibrahim konuk 2 September 2018 в 07:53
поделиться

3 ответа

Это немного неясно из вашего вопроса, но http://docs.djangoproject.com/en/dev/topics/http/urls/ , вероятно, даст объяснение тому, что вам нужно.

Особенно полезно отметить, как Django обрабатывает запросы:

Когда пользователь запрашивает страницу с вашего сайта на базе Django, система следует этому алгоритму, чтобы определить, какой код Python выполнить:

  1. Django определяет корень Модуль URLconf для использования. Обычно это значение параметра ROOT_URLCONF, но если входящий объект HttpRequest имеет атрибут urlconf (установленный обработкой запроса промежуточного программного обеспечения), его значение будет использоваться вместо параметра ROOT_URLCONF.
  2. Django загружает этот модуль Python и ищет переменные urlpatterns. Это должен быть список Python в формате, возвращаемом функцией django.conf.urls.defaults.patterns ().
  3. Django просматривает каждый шаблон URL по порядку и останавливается на первом шаблоне, который соответствует запрошенному URL.
  4. После совпадения одного из регулярных выражений Django импортирует и вызывает заданное представление, которое является простой функцией Python. Представлению передается HttpRequest в качестве первого аргумента и любые значения, захваченные в регулярном выражении, в качестве оставшихся аргументов.

Если вы сразу после полного пути, вы можете попробовать:

http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.get_full_path

Надеюсь, это поможет - оно указывает, как использовать модуль URLconf, и, надеюсь, поможет указать вам правильное направление.

0
ответ дан 24 November 2019 в 09:26
поделиться

Разъяснение вопроса: «В представлении, как получить имя 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.

3
ответ дан 24 November 2019 в 09:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: