2016-12-09 4 views
2

Wie zwei URLs mit derselben Struktur machen Arbeit machen? Ich möchte kein Präfix vor der URL hinzufügen. Ich möchte, dass alle Ansichten example.com/[slug] sind.Zwei URLs mit derselben Struktur

Hier sind meine URLs:

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

aber ich will es ohne Präfix:

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

ich es einfach durch Hinzufügen eines Präfix vor der ersten URL wie Arbeit machen kann. Jetzt stimmt es nur mit der ersten URL überein, aber nicht mit der zweiten.

+1

Sie es tun können, passende Kategorie Überprüfung oder Artikel direkt in Ihrer Sicht, und dann entsprechende Aktion aufrufen. Dieser Ansatz wird jedoch als sehr schlecht angesehen, da er die Vorteile des Django-Routing-Systems vollständig eliminiert. – Nevertheless

Antwort

3

Sie können nicht so tun, was Sie wollen. Stattdessen Sie eine andere Ansicht hinzufügen können, wo Sie Ihre Anforderungen auf der Basis einer Bedingung wie folgt versenden kann:

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

Jetzt können Ihre URL config:

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

Sie können nicht zwei URLs mit dem gleichen Musterauto erstellen Django durchläuft jedes URL-Muster der Reihe nach und stoppt bei dem ersten URL, der der angeforderten URL entspricht. siehe how-django-processes-a-request

Verwandte Themen