Как исключить строку из захвата шаблона URL "именованных групп" Django - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь создать шаблон URL для перехвата всех URL из root.

мой основной urls.py:

path('', (include('myapp.urls', namespace='app1')

Я использую два шаблона URL в app1.urls:

re_path(r'^(?P<url_var1>[-\w./]+)/$', DetailView1.as_view(), name='DetailView1'),
re_path(r'^(?P<url_var2>[-\w./]+)/$', DetailView2.as_view(), name='DetailView2'),

Мой файл views.py выглядит так:

class DetailView1(View):
    template_name = 'detail.html'
    def get(self, request, url_var1):
        obj1 = model1.objects.get(my_url=url_var1)
        return render(request, self.template_name, {'obj1':obj1})

class DetailView2(View):
    template_name = 'detail.html'
    def get(self, request, url_var2):
        obj2 = model2.objects.get(my_url=url_var2)
        return render(request, self.template_name, {'obj2':obj2})

, когда я запрашиваю URL "/ first-post / my-first-post /", он проверяет URL, которыйнаходится в моем "model1" под заголовком "my_url" и возвращает страницу.

Но когда я запрашиваю URL "/ second-post / my-second-post /", он проверяет URL в "model1"и выдает ошибку, так как URL находится в" model2 "под заголовком" my_url ".

Я знаю, что urlpattern следует проверке последовательности и останавливается на шаблоне, который соответствует первому urlpattern (DetailView1),Вот почему он дает мне эту ошибку.

Я хочу знать, есть ли способ, которым я могу переопределить это поведение urlpattern.

Я также попытался отменить, когда URL не найден в DetailView1:

try:
    obj1 = model1.objects.get(my_url=url_var1)
except:
    return reverse('app1:DetailView2')

Но это все равно дает мне ошибку.

Если у кого-нибудь из вас есть какие-либо другие предложения по отлову urlpatСкажите, пожалуйста, скажите, что мне нужно сделать, чтобы узнать, что такое root, а не два типа urlpattern.

Я делаю сайт, посвященный продукту, в котором есть две модели: «model1» - модель продукта, и «model2» - модель блога.,Теперь «модель1» предназначена для автомобилей с двумя основными категориями: «автомобиль» и «велосипед», а «модель2» имеет то же самое, что и «последние автомобили» и «последние велосипеды».Для этих категорий я хочу получить URL-адреса из корня, которые были заданы как "/ cars / lexus .....", "/ bike / ducati ....".Кроме того, могут быть дополнительные добавления URL-адреса подпапки, и все URL-адреса имеют идентификаторы продуктов, имеющие "."и цифры.Таким образом, есть способ, которым я могу выбрать URL для корневого каталога для обеих моделей, используя приведенный выше шаблон URL.

1 Ответ

0 голосов
/ 08 октября 2018

В Django невозможно иметь несколько представлений и один urlpattern.

Посмотрите на ваши представления.Они почти одинаковые.Вы должны поместить логику, управляющую различными параметрами url в одном представлении.

Мой совет также заключается в том, чтобы внимательно изучить дизайн вашей модели, похоже, у вас есть две модели, которые по сути одинаковы.Я чувствую, что это корень вашей проблемы.

Кроме того, я предполагаю, что вы пытаетесь создать какой-то блог.Django начал свою карьеру с новостного сайта.И у него есть несколько полезных инструментов.Например, взгляните на SlugField Это может предоставить вам функциональность, которую вы ищете.Не усложняя urlpatterns.

...