以10为基数的int()的文本无效:“abc12345”

2024-04-26 00:52:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉Python和Django。我甚至不能正确理解Regex。我有一个名为people的项目和一个名为individual的应用程序。 我在shell里查过这个。在

>>> from django.contrib.auth.models import User
>>> User.objects.all()
[<User: abc12345>, <User: mno09876>, <User: xyz56789>]

我想要: 当我访问www.mysite.com/abc12345时,它应该显示Hi abc12345 当我访问www.mysite.com/mno09876时,它应该显示Hi mno09876。这是我的详细视图

^{pr2}$

这是我的/people/urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
from individual.models import *
from individual.views import UserDetailView
from django.contrib.auth.models import User

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^fedidauth/', include('fedidauth.urls')),
    url(r'^individual/', include('fedidauth.urls')),
    url(r"^(?P<pk>\w+)/$", UserDetailView.as_view(), name="test.html"),
)

我有一个模板叫做基本.html以及测试.html在/模板中。在

我得到这个错误

The current URL, abc12345, didn't match any of these.


Tags: djangofromimporturlincludeadminmodelshtml
2条回答

您使用的是standart user,因此user pk始终是int,如果要按用户名选择user,则必须重写视图的get_object方法,如下所示:

class UserDetailView(DetailView):

def get_object(self, queryset=None):
    if queryset is None:
        queryset = self.get_queryset()
    username = self.kwargs.get('username', None)
    return queryset.get(username=username)

并将username添加到url:

^{pr2}$

即使不知道regex,也应该清楚您没有匹配“/abc12345/”的URL,只有一个匹配的“/user/12345”。你已经硬编码了“user”前缀。在

另一个问题是regex只接受数字(\d+)而不是字母数字字符(\w+)。在

相关问题 更多 >