2014-09-03 1 views
1

Я пытаюсь использовать ListView в той же модели для нескольких URL-адресов в Django. В частности, у меня есть домашняя страница с ListView и Pagination для сообщений в блоге, и я хочу иметь страницу архива, используя ListView без pagination с другим дизайном. Так что я пытался сделать это:Django ListView для той же модели по нескольким URL-адресам

urls.py:

from django.conf.urls import patterns, url 
from django.views.generic import ListView, DetailView 
from blogengine.models import Post 

urlpatterns = patterns('', 
    # index 
    url(r'^(?P<page>\d+)?/?$', ListView.as_view(
     model=Post, 
     paginate_by=4, 
     )), 
    # individual posts 
    url(r'^(?P<slug>[a-zA-Z0-9-]+)/?$', DetailView.as_view(model=Post, 
                  )), 
    # archive 
    url(r'^archive/$', ListView.as_view(
     model=Post, 
     )), 
) 

Но что происходит, Django просто игнорирует ссылки архив, потому что класс, основанный на вид уже используется (так что я просто получаю 404). Какие у меня варианты для этого?

ответ

1

Адрес /archive/ соответствует шаблону url для детального просмотра. У вас есть два варианта:

  1. Переместить шаблон url архива над шаблоном url детали. Обратите внимание: это означает, что вы не можете иметь сообщение с slug="archive"
  2. Измените шаблон url для отдельных сообщений, чтобы он не столкнулся с шаблоном url архива. Например:

    url(r'^posts/(?P<slug>[a-zA-Z0-9-]+)/?$', DetailView.as_view(model=Post, 
                    )),` 
    
Смежные вопросы