Django: иерархические URL - PullRequest
3 голосов
/ 03 июля 2010

Как вы справляетесь с иерархическими URL в Django?Есть ли лучшие практики для этого?Например.Если бы у меня был URL-адрес типа /blog/category1/category2/myblogentry (с использованием, например, django-mptt), сделайте ли вы некоторую проверку ранее в urls.py или укажите полный путь к представлению, пусть он проверяет каждую часть, если это допустимая категория и т. Д.?Звучит не так сложно, но просто любопытно, если кто-нибудь может порекомендовать некоторые лучшие практики или может показать некоторые хорошие (общие) решения?

Ответы [ 2 ]

2 голосов
/ 03 июля 2010

Боюсь, что нет единого ответа на ваш вопрос. Проблема заключается в том, что указание того, как иерархия выглядит на уровне URL, связывает слишком много логики.

Я нашел полезным для пользовательских декораторов. Например, в вашем случае вы можете написать декоратор, который проверяет правильность категорий и передает только последнюю категорию в представление. Что-то вроде декоратора, который может принимать функцию с такой подписью:

f(request, cat1, catN..., slug)

Проверка того, что каждая категория действительно является родительской для следующей, и передача просмотра окончательно проверенной категории.

@validate_category_hierarchy
def post_in_category(request, category, slug):

Если вам действительно нужно, чтобы он был расширяемым, декоратор может сделать небольшой самоанализ и сделать некоторые предположения (например, насколько глубоко может зайти дерево, каковы оставшиеся параметры и т. Д.).

Тогда все, что вам нужно сделать, это тщательно написать свой URL-адрес, чтобы декоратор получил параметры в хорошем состоянии. передать

1 голос
/ 15 мая 2012

это также http://djangosnippets.org/snippets/362/ также полезно. Это позволяет решить проверку соответствия URL без декораторов.

...