【问题标题】:Django-Python : invalid literal for int() with base 10: 'None'Django-Python:以 10 为基数的 int() 的无效文字:“无”
【发布时间】:2020-08-04 12:30:08
【问题描述】:

我是 Django 新手。我正在尝试构建一个页面来显示所有已在我的网站上注册的用户。

我尝试使用的逻辑是在内置用户模型中获取用户的 id。

在views.py中,我创建了一个基于类的视图,它是一个像这样的DetailView

from django.shortcuts import render
from django.contrib.auth.models import User
from django.views.generic import DetailView

#I have not used a ListView class but I have used a function based View     
def home(request):
    context = {
        'users': User.objects.all(),
    }
    return render(request, 'home_page/home.html', context)
    
class UserDetailView(DetailView):
    model = User

urls.py:

from django.urls import path
from .views import PostDetailView, UserDetailView

urlpatterns = [
    path('', views.home, name='home_page'),
    path('users/<pk>/', UserDetailView.as_view(), name='user-detail'), 
]

在 home.html 中,我添加了这个:

{% for user in users %}
    <h2><a class="article-title" href="{% url 'user-detail' user.id %}">{{ user.username }}</a></h2>
{% endfor %} 

当我点击用户名时,它会将我重定向到 localhost:8000/users/None/,我收到此错误:

Exception Type: ValueError
Exception Value: invalid literal for int() with base 10: 'None' 

这是从用户模型中获取用户身份的正确方法吗?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    改变你的 urls.py

    from django.urls import path
    from .views import PostDetailView, UserDetailView
    
    urlpatterns = [
        path('', views.home, name='home_page'),
        path('user/<int:pk>/', UserDetailView.as_view(), name='user-detail'), 
    ]
    

    url 等待一个整数,所以我们必须在 url 中指定这个。

    您对:

    from django.views import View
    from django.shortcuts import get_object_or_404
    
    
    class UserDetailView(View):
    
        def get(self, request, pk):
            user = get_object_or_404(User, pk=pk)
            return render(request, 'home_page/user_details.html', locals())
    

    我个人不喜欢使用context。我使用locals() 将方法中存在的变量传递给模板。 在 home_page 文件夹中创建一个新的 html user_details.html 文件

    和你的模板:

        <h2><a class="article-title" href="{% url 'user-detail' pk=user.pk %}">{{ user.username }}</a></h2>
    

    【讨论】:

    • 好吧,我遇到了这个错误 - 找不到关键字参数“{'pk': None}' 的“用户详细信息”的反向。尝试了 1 种模式:['users/(?P[0-9]+)/$']
    • href 标签有问题。我改变了我的回答。
    • 是的,我该怎么办? User 模型是否有每个用户的 id(我的意思是整数 id)?
    • @Saatwik 是的。检查现在是否可以看到直接输入http://localhost:8000/users/1/ 的页面
    • 是的,我明白了。但是当我添加 int:pk 我得到 NoReverseMatch 错误
    【解决方案2】:
    {% for user in users %}
        <h2><a class="article-title" href="{% url 'user-detail' user.id %}">{{ user.username }}</a></h2>
    {% endfor %} 
    

    它的用户,而不是循环中的用户

    【讨论】:

    • 我用过 - 'users': User.objects.all(),
    • 模板标签内好友{{ }},请再检查一遍,你是在使用用户
    • Gotcha 更改了它,但仍然显示相同的错误
    【解决方案3】:

    如果您还没有任何用户,则 QueryDict 将没有元素(即无),我认为这是错误代码所指的。一旦创建了用户,结果应该是一个整数(即用户的主键)。为了绕过此错误,请检查 QueryDict 在您的 for 循环之前是否有任何元素,即

    {% if users %}
        {% for user in users %}
            <h2><a class="article-title" href="{% url 'user-detail' user.id %}">{{ user.username }}</a></h2>
        {% endfor %}
     {% else %}
         <h2>There are no users loaded yet </h2>
     {% endif %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-04
      • 2023-03-09
      • 2012-07-08
      • 2011-07-17
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多