【问题标题】:invalid literal for int() with base 10: 'abc12345'基数为 10 的 int() 的无效文字:'abc12345'
【发布时间】:2014-05-23 10:46:47
【问题描述】:

我是 Python 和 Django 的新手。我什至不正确理解正则表达式。我有一个名为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。这是我的详细视图

class UserDetailView(DetailView):
    model = User
    def get_context_data(self, **kwargs):
        context=super[UserDetailView, self].get_context_data(**kwargs)
        return context

这是我的/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"),
)

我在 /templates 中有一个名为 base.html 和 test.html 的模板。

我收到此错误

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

【问题讨论】:

    标签: python regex django django-views django-class-based-views


    【解决方案1】:

    你使用的是标准用户,所以用户pk总是int,如果你想通过用户名选择用户,你必须重写你的视图的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(r"^(?P<username>\w+)/$", UserDetailView.as_view(), name="test.html"),
    

    【讨论】:

    • 我删除了旧的 UserDetailView 类,现在我收到此错误UserDetailView is missing a queryset. Define UserDetailView.model, UserDetailView.queryset, or override UserDetailView.get_queryset().
    • model = User 添加到您的视图中
    • 我添加了,它给了这个TemplateDoesNotExist auth/user_detail.html
    • 这个视图的模板名称是什么?添加template_name = 'your_template_name'查看
    【解决方案2】:

    即使不知道正则表达式,您也应该清楚您没有匹配“/abc12345/”的 URL,您只有一个匹配的“/user/12345”。您已经硬编码了“用户”前缀。

    另一个问题是您的正则表达式只接受数字 (\d+) 而不是字母数字字符 (\w+)。

    【讨论】:

    • 我认为DetailView有问题。我已经从教程中复制了它
    • 您是否按照我的解释更改了正则表达式的其余部分?现在是什么样子?
    • 我想提一提的是,我在 myproject 中添加了这个 url 行,它是 people/urls.py,而不是 myapp/urls.py。我不知道是添加在 project/urls.py 还是 myapp/urls.py 现在是 url 行。 url(r"^/(?P&lt;pk&gt;\w+)/$", UserDetailView.as_view(), name="test.html"),
    • 等等...我已经从 URL 中删除了第一个 /,现在 URL 是 url(r"^(?P&lt;pk&gt;\w+)/$", UserDetailView.as_view(), name="test.html"),错误是 invalid literal for int() with base 10: 'abc12345'
    猜你喜欢
    • 2013-05-31
    • 2018-03-13
    • 1970-01-01
    • 2021-06-25
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多