2014-01-30 3 views
0

У меня есть два класса, скажем, «Категория» и «Продукт».Тот же шаблон URL, два разных вида?

То, что я пытаюсь достичь, на самом деле довольно простое.
«категория» содержит URL (скажем, «пищу»), что означает, когда я попал в URL, как это: mydjango.com/myapp/food/
Он фактически выполняет поиск в базе данных, если есть «Категория» объект, имеющий соответствие URL «пища ».
URL, картина что-то вроде этого:
url(r'^(?P<rel_url>.+)/$', login_required(is_allowed(Category.as_view())), name='category')

Теперь, скажем, я хочу получить доступ к продукту (от модели «продукт»), который содержится в категории Матчин «пищи», как URL. Например:
mydjango.com/myapp/food/rice
Поле url в модели продукта выглядит следующим образом: «еда/рис» Затем мой шаблон url выглядит точно так же, как и выше, кроме названия вида.
Проблема в том, что django проверяет только первый URL-адрес и сообщает, что нет объекта Category, содержащего URL-адрес «food/rice». Это имеет смысл, поскольку этот URL-адрес хранится в модели продукта.

Упрощенный вопрос: Как я могу получить доступ к двум различным представлениям в соответствии с шаблоном, который я сопоставляю? mydjango.com/myapp/food должен использовать представление категории (используя rel_url)
mydjango.com/myapp/food/rice не соответствует какой-либо категории, то он использует вид продукта.

Кстати, я знаю, что это не хороший способ, но это единственное решение, которое я нашел (приложение гораздо более сложным, чем просто Категория/продукт)

ответ

1

Вам нужно будет дифференцировать на основе url, а затем просто перенесите более конкретный шаблон сначала в urls.py. Будет использован первый шаблон для сопоставления.

Это приведет вас к чему-то вроде:

url(r'^(?P<cat>[^/]+)/(?P<prod>[^/]+)/$', Product.as_view(), name='product') 
url(r'^(?P<cat>.+)/$', Category.as_view(), name='category') 
+0

В модели «продукт», URL-адрес является полным URL. Поэтому я не могу отличить, является ли это продуктом или категорией, прежде чем обращаться к базе данных. – Depado

+0

Бог, ты был прав. Спасибо, что ты гений. – Depado

Смежные вопросы