【问题标题】:Django Slug Generated URL Returning: 'No Fund matches the given query.'Django Slug 生成的 URL 返回:“没有资金与给定的查询匹配。”
【发布时间】:2016-01-31 09:45:15
【问题描述】:

我正在尝试使用 slug 生成 url,但是无论我在哪里访问该 url,我都会得到 'Page not found at /funds/[slug_generated_value]'

Raised by:  apps.funds.views.details
No Fund matches the given query

这是我的models.py,我使用Fund.name 生成fund_id 来创建一个首字母缩略词,并添加从截止日期减去小时、分钟、秒值的日期时间值:

class Fund(models.Model):
    name = models.CharField(max_length=128, unique=True)
    description = models.TextField()
    duration = models.CharField(max_length=10)
    slug = models.SlugField(unique=True)

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

    def __str__(self):
        return self.name

class OfferedFunds(models.Model):
    fund_id = models.CharField(max_length=55, blank=True)
    fund_name = models.ForeignKey(Fund)
    deadline = models.DateTimeField('Deadline')
    slug = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        output = ''
        for i in self.fund_name.name.upper().split():
            output += i[0]
        deadline = str(self.deadline)[:-15] 
        deadline = deadline.replace('-', '')
        random_number = random.randint(1,9)
        self.fund_id = '%s%s%s' % (output, deadline, random_number)
        self.slug = slugify(self.fund_id)
        super(OfferedFunds, self).save(*args, **kwargs)

    class Meta:
        verbose_name_plural = "Offered funds"

    def __str__(self):
        return '%s' % (self.fund_id)

还有我对应的views.py:

def details(request, slug):
    context_dict = {}

    fund = get_object_or_404(Fund, slug=slug)
    context_dict['fund'] = fund

    offered_funds = OfferedFunds.objects.filter(fund_name=fund, deadline__gte=timezone.now()).order_by('deadline')
    context_dict['offered_funds'] = offered_funds

    return render(request, 'funds/details.html', context_dict)

def of_details(request, slug):
    context_dict = {}

    of = get_object_or_404(OfferedFunds, slug=slug)
    context_dict['of'] = of

    return render(request, 'funds/offered-funds-details.html', context_dict)

最后是我的 urls.py:

url(r'^(?P<slug>[\w-]+)/$', views.details, name='details'),
url(r'^(?P<slug>[\w-]+)/$', views.of_details, name='of details'),

我的 details() 视图工作正常,但它的 of_details() 不起作用。如果我取出 details() 视图,of_details() 有效。任何人都知道我该如何解决这个错误?谢谢

【问题讨论】:

  • Django 如何区分相同的 URL?
  • 你的两个正则表达式是相同的,所以当 Django 搜索适用的 URL 匹配时,它总是会实现 view.details 函数
  • 是的,就是这样。更改为1r'^det/(?P&lt;slug&gt;[\w-]+)/$',它就像一个魅力

标签: python django django-models django-views django-urls


【解决方案1】:

好的,正如用户 lambo477 在 cmets 中指出的那样,我的网址太相似了,所以我更改了:

url(r'^(?P<slug>[\w-]+)/$', views.of_details, name='of details'),

到:

url(r'^det/(?P<slug>[\w-]+)/$', views.of_details, name='of details'),

而且成功了。

【讨论】:

    猜你喜欢
    • 2019-03-06
    • 2015-03-25
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2019-07-21
    • 2021-11-21
    相关资源
    最近更新 更多