Проверьте, соответствует ли URL в шаблоне - PullRequest
5 голосов
/ 20 июня 2011

Можно ли в шаблоне проверить, что какой-либо URL соответствует какому-либо шаблону из URL?

Ответы [ 4 ]

7 голосов
/ 21 июня 2011

Вы можете использовать форму «как» тега URL, чтобы проверить, существует ли именованный URL.

{% url path.to.view as the_url %}
{% if the_url %}
  <a href="{{ the_url }}">Link to optional stuff</a>
{% endif %}

Когда используется «как», оно не вызывает исключения.

6 голосов
/ 20 июня 2011

Это то, что вы обычно делаете в файле views.py с помощью reverse () для именованных URL-адресов с известными аргументами или resol * () для путей.

Если вам нужна эта функциональность конкретно в шаблоне, вот хакерское решение:

@register.simple_tag
def urlpath_exists(name):
    """Returns True for successful resolves()'s."""
    try:
        return bool(resolve(path))
    except Resolver404:
        return False

Примечание : это не гарантирует, что URL действителен, только что было совпадение с образцом.

1 голос
/ 20 июня 2011

Допустим, имя вашего проекта пустое. Тогда,

from dummy.urls import urlpatterns
def find_url(url):
  for e in urlpatterns:
    if e.regex.match(url):
      print 'found!'  #or do whatever you want
      return          #then exit the procedure.
  print 'not found!'
0 голосов
/ 20 июня 2011

Я предполагаю, что не существует простого способа сделать это. Поэтому я написал простой тег шаблона, который берет имя URL и вызывает метод reverse и помещает его в try..except:

try:
    result = reverse(url)
except:
    result = None
return result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...