Django - get_redirect_url()导致找不到页面(404)

时间:2018-04-30 23:54:26

标签: django

我正在尝试实现最喜欢的功能,以便用户可以选择喜欢的商店。我目前正在引用视频https://www.youtube.com/watch?v=pkPRtQf6oQ8&t=542s并坚持开头。

当我尝试移动到网址https://www.fake-domain.com/my-domain/like时,它会抛出错误消息No Store matches the given query.所以,我猜self.kwargs.get("domainKey")此代码段似乎抛出了错误,但我不知道知道为什么。 我不确定我的代码是否足够,所以请让我知道我需要展示更多代码。

models.py

class Store(models.Model):
    ...
    domainKey = models.CharField(max_length=100)
    likes = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
    ...

urls.py

url(r'^(?P<store_domainKey>.*)/$', views.detail, name='detail'),
url(r'^(?P<store_domainKey>.*)/like/$', views.StoreLikeRedirect.as_view(), name='like'),

views.py

class StoreLikeRedirect(RedirectView):
    def get_redirect_url(self, *args, **kwargs):
        store_domainKey = self.kwargs.get("domainKey")
        print(store_domainKey)
        obj = get_object_or_404(Store, pk='store_domainKey')
        return obj.get_absolute_url()

-------------------------------- EDIT ----------- -------------------

根据反馈修改了代码,但仍无效。 当我输入网址时,终端会说出以下内容:

None <-- this is shown by print(store_domainKey) in views.py
Not Found: /down-east/like/

由于views.py中的print函数打印None,我认为行store_domainKey = self.kwargs.get("domainKey")上有问题。部分self.kwargs.get()似乎不起作用。在帖子顶部的示例视频中,该人使用SlugField(),但我使用CharField()作为domainKey。使用self.kwargs.get()可能是个问题吗?

views.py

class StoreLikeRedirect(RedirectView):
    def get_redirect_url(self, *args, **kwargs):
        store_domainKey = self.kwargs.get("domainKey")
        print(store_domainKey)
        obj = get_object_or_404(Store, domainKey=store_domainKey)
        return obj.get_absolute_url()

urls.py

url(r'^(?P<store_domainKey>.*)/like/$', views.StoreLikeRedirect.as_view(), name='like'),
url(r'^(?P<store_domainKey>.*)/$', views.detail, name='detail'),

models.py

class Store(models.Model):
    ...
    domainKey = models.CharField(max_length=100)
    likes = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
    ...

    def get_absolute_url(self):
        return reverse('boutique:detail', kwargs={"domainKey":self.domainKey})

----------------------------第二次更新-------------- ---------------

所以,现在self.kwargs.get("domainKey")非常好地返回域密钥! 但是

NoReverseMatch at /down-east/like/
Reverse for 'detail' with arguments '()' and keyword arguments '{'domainKey': 'down-east'}' not found. 1 pattern(s) tried: ['(?P<store_domainKey>.*)/$']

1 个答案:

答案 0 :(得分:1)

在您的视图中,您使用的是字符串而不是您创建的变量。您可能需要在字段domainKey而非pk上进行过滤。

尝试更改

obj = get_object_or_404(Store, pk='store_domainKey')

obj = get_object_or_404(Store, domainKey=store_domainKey)