1

我试图在我的 django 应用程序中通过 id 获取数据。问题是我不知道用户将点击的 id 类型。我在视图中输入以下代码。

意见

def cribdetail(request, meekme_id):
    post=Meekme.objects.get(id=meekme_id)
    return render_to_response('postdetail.html',{'post':post, 'Meekme':Meekme},context_instance=RequestContext(request))

网址配置

url(r'^cribme/(?P<meekme_id>)\d+/$', 'meebapp.views.cribdetail', name='cribdetail'),

在模板中:

<a href="{% url cribdetail post.id %}">{{ result.object.title }}</a> 

当我单击模板中的上述链接时,出现以下错误:

ValueError at /cribme/0/

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

Request Method:     GET
Request URL:    http://127.0.0.1:8000/cribme/0/
Django Version:     1.4
Exception Type:     ValueError
Exception Value:    

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

Exception Location:     C:\Python27\lib\site-packages\django\db\models\fields\__init__.py in get_prep_value, line 537
Python Executable:  C:\Python27\python.exe
Python Version:     2.7.3

一直在与这个斗争一段时间。我怎样才能摆脱这个错误?

4

4 回答 4

1

在我看来,你的 urlconf 是罪魁祸首,应该是:

url(r'^cribme/(?P<meekme_id>\d+)/$', 'meebapp.views.cribdetail', name='cribdetail'),

不是:

url(r'^cribme/(?P<meekme_id>)\d+/$', 'meebapp.views.cribdetail', name='cribdetail'),

?P<meekme_id>表示“在括号之间给出匹配的字符串这个名称。 () 不匹配任何内容,这就是为什么您的应用程序在尝试使用 id 查找项目时会出错的原因''

当括号括起来时\d+,您匹配一个自然数,这应该有效。

于 2012-06-29T15:34:10.973 回答
1

urlconf 中的正则表达式需要稍作调整:

url(r'^cribme/(?P<meekme_id>\d+)/$', 'meebapp.views.cribdetail', name='cribdetail'),

参数的值meekme_id没有被捕获,因为\d+在括号之外。

于 2012-06-29T15:34:13.850 回答
0

你放错了右括号:

url(r'^cribme/(?P<meekme_id>\d+)/$', 'meebapp.views.cribdetail', name='cribdetail'),

请注意,(?P<meekme_id> .. )组构造应包含\d+您尝试匹配的字符。在您不正确的正则表达式中,您定义了一个不包含任何匹配字符的组,因此始终为空字符串''

于 2012-06-29T15:32:58.070 回答
0

除了 URL 问题之外,您一开始并没有生成正确的链接 - 您在模板中引用了result.object.titlepost.id在模板中,这就是为什么您的 URL 包含 0 的 ID。我希望你的意思是result.idresult.object.id

于 2012-06-29T15:41:09.550 回答