1

我正在尝试使用 Django 创建一个网站。我想要一个显示rubriques的索引,当你点击一个rubrique时,这个rubrique的文章就会显示出来。这是我的 models.py :

class Rubrique(models.Model):
    nom = models.CharField(max_length=200)
    resume = models.CharField(max_length=200)

这是我的 urls.py :

urlpatterns = patterns('',
                       url(r'^$', views.index, name='index'),
                       url(r'^(?i)(?P<rubrique_id>)[a-z]+/$',
                           views.rubriques, name='rubriques'),
                       url(r'^(?i)(?P<rubrique_id>)[a-z]+/(?P<article_id>)[a-z]+/$',
                           views.articles, name='articles'),
                       )

这是我的views.py:

def rubriques(request, rubrique_id):
    rubrique = get_object_or_404(Rubrique, pk=rubrique_id)  <-- The error points this line
    return render(request, 'rubriques/rubrique.html', {'rubrique': rubrique})

Aaand 这是错误:

ValueError at /rubriques/sport/

invalid literal for int() with base 10: ''

运动量规存在,我的模板应该没问题。怎么了 ?我对 Django 有问题...

4

2 回答 2

2

pk默认情况下,字段是一个数字,就像在您的模型中一样。

你的 url (?P<rubrique_id>)[a-z]+-> 字母中有这个,而不是数字。

我不知道你怎么称呼你的网址......但这肯定是错误的。

如果要按名称传递签名,请将字段设置为主键:

class Rubrique(models.Model):
    nom = models.CharField(max_length=200, primary_key=True)
    resume = models.CharField(max_length=200)

或者,另一种选择,更改查找代码:

rubrique = get_object_or_404(Rubrique, nom=rubrique_id)

在最后一种情况下,您应该将其设置为唯一的:

class Rubrique(models.Model):
     nom = models.CharField(max_length=200, unique=True)
     resume = models.CharField(max_length=200)
于 2013-05-21T14:33:12.187 回答
0

您没有在模型中声明任何主键字段,因此 Django 自动创建了一个整数字段作为主键,因此 aliaspk指向一个自动创建的字段。它应该是

class Rubrique(models.Model):
    nom = models.CharField(max_length=200, primary_key=True)
    resume = models.CharField(max_length=200)

详见Django模型字段文档自动主键

于 2013-05-21T14:33:37.833 回答