Джанго создает проблемы с URL-адресами, чтобы поймать и перейти к представлению.(слизняки) - PullRequest
1 голос
/ 25 августа 2011

В настоящее время я делаю views, вызванный slug s на django, но у меня, похоже, есть некоторые проблемы с этим.

Предположим, у меня есть записи в базе данных, такие как de ce ceiling (slug fields).Теперь, когда я звоню, myapp/ce или myapp/de.Возвращает вид, который я хочу.Но когда я звоню myapp/ceiling, он возвращает 404.

No sculpture found matching the query

Хотя перехватывает URL.

Проблема возникает, когда я использую заглавную букву вполе name.Остальные поля содержат lowercase.

Мне не удалось понять это поведение.

Мой код выглядит следующим образом:

urls.py

urlpatterns = patterns('sculptures.views',
            (r'^$', SculptureListView.as_view()),
            (r'^(?P<slug>[\w-]+)/$', SculptureDetailView.as_view()),
        )

views.py

class SculptureDetailView(DetailView):
    context_object_name = 'sculpture'
    def get_queryset(self):
        sculpture_slug = get_object_or_404(Sculpture, slug__iexact=self.kwargs['slug'])
        return Sculpture.objects.filter(slug=sculpture_slug)

1 Ответ

2 голосов
/ 25 августа 2011

Глядя на ваш код:

def get_queryset(self):
    sculpture_slug = get_object_or_404(Sculpture, slug__iexact=self.kwargs['slug'])

Здесь вы выбираете объект Sculpture, который соответствует захваченному слагу.

    return Sculpture.objects.filter(slug=sculpture_slug)

И затем вы получаете Sculptureобъект, чей слаг является другим Sculpture объектомИнтересно, как это работает даже в некоторых случаях:)

Поскольку у вас есть DetailView, вы можете напрямую использовать get_object():

class SculptureDetailView(DetailView):
    def get_object(self):
        return get_object_or_404(Sculpture, slug__iexact=self.kwargs['slug'])
...