Django - Python: недопустимый литерал для int () с базой 10: 'None' - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в Django. Я пытаюсь создать страницу, которая отображает всех пользователей, которые зарегистрировались на моем веб-сайте.

logi c, который я пытался использовать, получает идентификатор пользователя во встроенной модели пользователя.

В 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'), 
]

Дома. 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' 

Это правильный способ получить ИС пользователя из модели пользователя?

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

измените свой 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(), который передает переменные, присутствующие в методе, в шаблон. Создайте новый файл html user_details.html в папке home_page

и свой шаблон в:

    <h2><a class="article-title" href="{% url 'user-detail' pk=user.pk %}">{{ user.username }}</a></h2>
0 голосов
/ 04 августа 2020
{% for user in users %}
    <h2><a class="article-title" href="{% url 'user-detail' user.id %}">{{ user.username }}</a></h2>
{% endfor %} 

Его пользователь, а не пользователи в l oop

...