Django 在捕获和转发到视图的 URL 上遇到了麻烦。 (段头字段)

发布于 2024-12-01 09:53:32 字数 1029 浏览 1 评论 0原文

我目前正在 django 上使用 slug 调用 views,但我似乎在这方面遇到了一些麻烦。

假设我有像 de ce ceilingslug fields)这样的数据库条目。 现在,当我调用 myapp/cemyapp/de 时。它返回我想要的视图。但是当我调用 myapp/ceiling 时,它返回 404

未找到与查询匹配的雕塑

但它捕获了 url。

当我在 name 字段上使用大写字母时,就会出现问题。其他字段采用小写

我无法理解这种行为。

我的代码如下:

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)

I am currently making views called by slugs on django but I seem to have some troubles on that.

Suppose I have database entries like de ce ceiling (slug fields).
Now when I call, myapp/ce or myapp/de. It returns the view I want. But when I call myapp/ceiling, it returns 404.

No sculpture found matching the query

It catches the url though.

The problem occurs when I use capital letter on the name field. The other fields hold lowercase.

I failed to understand this behavior.

My code is as follows:

urls.py

urlpatterns = patterns('sculptures.views',
            (r'^

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)
, SculptureListView.as_view()), (r'^(?P<slug>[\w-]+)/

views.py


, SculptureDetailView.as_view()),
        )

views.py

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

层林尽染 2024-12-08 09:53:32

查看您的代码:

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

在这里,您正在获取与捕获的 slug 匹配的 Sculpture 对象。

    return Sculpture.objects.filter(slug=sculpture_slug)

然后您将获得 Sculpture 对象,其 slug 是另一个 Sculpture 对象。我想知道在某些情况下这是如何工作的:)

由于您有一个 DetailView,您可以直接使用 get_object()

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

Looking at your code:

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

Here you're fetching the Sculpture object that matches the captured slug.

    return Sculpture.objects.filter(slug=sculpture_slug)

And then you get the Sculpture object whose slug is another Sculpture object. I wonder how this even works in some cases :)

Since you have a DetailView, you can directly use get_object():

class SculptureDetailView(DetailView):
    def get_object(self):
        return get_object_or_404(Sculpture, slug__iexact=self.kwargs['slug'])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文