菲尔德'id'期待一个数字,但得到了'logout_view'



我试图添加新路径,但这发生了

Field 'id' expected a number but got 'logout_view'.

在pycharm终端中,我有其他错误。o

ValueError: Field 'id' expected a number but got 'favicon.ico'.

文件:

urls.py->

from django.contrib import admin
from django.urls import path
from Artykuly.views import *
urlpatterns = [
path('admin', admin.site.urls),
path('', index, name='index'),
path('<category_id>', category, name='category'),
path('artykul/<category_id>', article, name='article'),
path('login', login_view, name='login_view'),
path('register', register_view, name='register_view'),
path('logout', logout_view, name='logout_view'),
]

views.py

from django.contrib.auth import login
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Category, Article
from .forms import LoginForm, RegisterForm
# Create your views here.

def index(request):
Categories = Category.objects.all()
dane = {
'Categories': Categories
}
return render(request, 'template.html', dane)

def category(request, category_id):
category_user = Category.objects.get(pk=category_id)
article_data = Article.objects.filter(category_id=category_id).all()
Categories = Category.objects.all()
dane = {
'category_user': category_user,
'article_data': article_data,
'Categories': Categories,
}
return render(request, 'category.html', dane)

def article(request, category_id):
article = Article.objects.get(pk=category_id)
article_user = Article.objects.filter(pk=category_id)
Categories = Category.objects.all()
dane = {
'article': article,
'article_user': article_user,
'Categories': Categories,
}
return render(request, 'artykul.html', dane)

def register_view(request):
form = RegisterForm(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get("username")
email = form.cleaned_data.get("email")
password = form.cleaned_data.get("password1")
password2 = form.cleaned_data.get("password2")
try:
user = User.objects.create_user(username, email, password)
except:
user = None
if user != None:
login(request, user)
return redirect("/")
else:
request.session['register_error'] = 1
return render(request, 'forms.html', {'form': form})

def login_view(request):
form = LoginForm(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
user = authenticate(request, username=username, password=password)
if user != None:
login(request, user)
return redirect("/")
else:
request.session['invalid_user'] = 1
return render(request, 'forms.html', {'form': form})

def logout_view(request):
logout(request)
return redirect("login")

追溯->

Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/logout_view
Django Version: 3.2
Python Version: 3.8.6
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Artykuly']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback (most recent call last):
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelsfields__init__.py", line 1823, in get_prep_value
return int(value)
The above exception (invalid literal for int() with base 10: 'logout_view') was the direct cause of the following exception:
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangocorehandlersexception.py", line 47, in inner
response = get_response(request)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangocorehandlersbase.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:Program Files (x86)PythonBlogBlogArtykulyviews.py", line 19, in category
category_user = Category.objects.get(pk=category_id)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelsmanager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelsquery.py", line 424, in get
clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelsquery.py", line 941, in filter
return self._filter_or_exclude(False, args, kwargs)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelsquery.py", line 961, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, args, kwargs)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelsquery.py", line 968, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelssqlquery.py", line 1396, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelssqlquery.py", line 1415, in _add_q
child_clause, needed_inner = self.build_filter(
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelssqlquery.py", line 1350, in build_filter
condition = self.build_lookup(lookups, col, value)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelssqlquery.py", line 1196, in build_lookup
lookup = lookup_class(lhs, rhs)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelslookups.py", line 25, in __init__
self.rhs = self.get_prep_lookup()
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelslookups.py", line 77, in get_prep_lookup
return self.lhs.output_field.get_prep_value(self.rhs)
File "D:Program Files (x86)PythonBlogvenvlibsite-packagesdjangodbmodelsfields__init__.py", line 1825, in get_prep_value
raise e.__class__(
Exception Type: ValueError at /logout_view
Exception Value: Field 'id' expected a number but got 'logout_view'.

发生这种情况的原因是因为您的模式:

path('<category_id>', category, name='category'),

由于您没有指定路径转换器类型,因此假设它是string,因此匹配所有字符串,包括favicons.ico。但这可能不起作用,因为这背后的视图(category(期望category_idint

您可以使用<int:category_id>:将category_id指定为数字序列

urlpatterns = [
path('admin', admin.site.urls),
path('', index, name='index'),
path('<int:category_id>', category, name='category'),
path('artykul/<int:category_id>', article, name='article'),
path('login', login_view, name='login_view'),
path('register', register_view, name='register_view'),
path('logout', logout_view, name='logout_view'),
]

这也是loginlogout等不会被触发的原因:因为如果不将category_id指定为数字序列,它将是第一个匹配的路径,因此它将";火;CCD_ 11。

另一个错误:

Field 'id' expected a number but got 'logout_view'.

可能是因为URL(例如<a …>标签中(使用logout_view作为URL,因此应该使用{% url … }模板标签[Django-doc]。

最新更新