【问题标题】:Slug for url in django在 django 中获取 url
【发布时间】:2020-10-16 15:42:23
【问题描述】:

我无法解决这个问题。去了无数的网站和问题,但找不到为什么它不起作用。一切都是进口的。 我运行服务器后得到的错误是:Reverse for 'random_book' with arguments '('',)' not found。尝试了 1 种模式:['book/(?P[-a-zA-Z0-9_]+)$'] 它用模板中的红色突出显示:{% url 'random_book' random_item.slug %} 型号:

class Books(models.Model):
title=models.CharField(max_length=200)
author=models.CharField(max_length=150)
description=models.TextField()
cover=models.ImageField(upload_to='images/', blank=True)
slug=models.SlugField(max_length=100, blank=True, unique=True)
genre=models.ManyToManyField(Genres)

def save(self, *args, **kwargs):
    self.slug= slugify(self.title)
    super().save(*args, **kwargs)

def __str__(self):
    return self.title

def get_absolute_url(self):
    kwargs=self.slug
    return reverse('random_book', kwargs=kwargs)

观看次数:

def random_book(request, slug):
cartile=Books.objects.all()
random_item=random.choice(cartile)
return render(request, 'carti/book.html', context={"random_item": random_item})

网址:

path('book/<slug:slug>', views.random_book, name="random_book"),

模板:

<a href="{% url 'random_book' random_item.slug %}">{{ random_item.title }}</a>

希望你们能帮助我。

编辑: 如果有人遇到过这个问题,我已经自己解决了这个问题,方法如下:

问题在于视图。我尝试在显示该书的页面而不是按下按钮的主页中获取随机书。基本上在主页上,如果您按下按钮,它会将您带到另一个开始随机化过程的页面,因此它没有任何 slug 数据要传递。您需要在此处添加 random.choice()。

然后,要获取该随机数据并使用其独特的 slug 显示它,您只需在该 random_book 视图上使用 book=Books.objects.get(slug=slug) 。出于某种原因,我仍然不明白,通过获取 slug,您会以某种方式获得与该 slug 关联的数据。

【问题讨论】:

    标签: django


    【解决方案1】:

    这是一个“反向使用 kwargs”类型的问题。我怀疑你的错误来自这里:

    def get_absolute_url(self):
        kwargs=self.slug
        return reverse('random_book', kwargs=kwargs)
    

    这不是您使用reverse 的方式,请参阅an example

    我怀疑以这种方式重写代码可以解决问题:

    def get_absolute_url(self):
        kwargs={'slug': self.slug}
        return reverse('random_book', kwargs=kwargs)
    

    【讨论】:

    • 感谢您的回复。我以前试过,看了你的评论后又试了一次。相同的错误:未找到带有参数 '('',)' 的 'random_book' 的反向操作。尝试了 1 种模式:['book/(?P[-a-zA-Z0-9_]+)$']
    • 很抱歉听到这个消息。难道random_item.slug 在某些情况下只是一个空字符串?错误也可能以这种方式引起。请注意,您的模型中允许使用 blank slug。
    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 2013-03-23
    • 2020-08-24
    • 1970-01-01
    • 2021-10-08
    • 2018-06-23
    • 2015-03-13
    • 2015-04-25
    相关资源
    最近更新 更多