2016-12-09 3 views
2

Как создать два URL-адреса с одинаковой структурой? Я не хочу добавлять префикс перед URL. Я хочу, чтобы все виды были example.com/[slug].Два URL-адреса с одинаковой структурой

Вот мои URL-адрес:

url(r'^(?P<slug>[-_\w]+)', views.CategoryArticlesView.as_view(), name='single_category'), 
url(r'^(?P<slug>[-_\w]+)', views.SingleArticleView.as_view(), name='single_article'), 

Я могу легко сделать его работу путем добавления префикса перед первыми URL, как:

url(r'^**category/**(?P<slug>[-_\w]+)', views.CategoryArticlesView.as_view(), name='single_category'), 

, но я хочу его без префикса. Теперь он соответствует только первому URL, но не второму.

+1

Вы можете сделать это, проверка соответствия категории или статью прямо на ваш взгляд, а затем вызов соответствующего действия. Но этот подход считается очень плохой практикой, поскольку он полностью исключает преимущества системы маршрутизации Django. – Nevertheless

ответ

3

Вы не можете делать то, что хотите. Вместо этого, вы можете добавить еще один вид, где вы можете направить свои запросы на основе некоторых условий, как это:

def some_view(request): 
    if some_condition: 
     return CategoryArticlesView.as_view()(self.request) 
    else: 
     return SingleArticleView.as_view()(self.request) 

Теперь, ваш URL конфигурации может быть:

url(r'^(?P<slug>[-_\w]+)', views.some_view, name='some_name'), 
2

Вы не можете создать два URL-адреса с одним и тем же шаблоном автомобиля. Django пробегает каждый шаблон URL по порядку и останавливается на первом, который соответствует запрошенному URL-адресу. см. how-django-processes-a-request

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

  • Нет связанных вопросов^_^