通过id获取对象时的ValueError

时间:2012-06-29 15:30:46

标签: python django django-views django-urls

我正在尝试通过我的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配置

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 个答案:

答案 0 :(得分: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+时,您匹配一个应该有效的自然数。

答案 1 :(得分:1)

你的urlconf中的正则表达式需要一些调整:

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

meekme_id参数的值未被捕获,因为\d+位于括号之外。

答案 2 :(得分:0)

你错了一个右括号:

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

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

答案 3 :(得分:0)

除了网址问题之外,您还没有首先生成正确的链接 - 您在模板中引用result.object.titlepost.id,这就是为什么您的网址包含0作为ID的原因。我希望您的意思是result.idresult.object.id