Python 重定向()无效
重定向函数工作不正常。它正在显示错误 NoReverseMatch at/post/new/Reverse用于带有参数的“post_detail” 未找到“()”和关键字参数“{'pk':9}”。已尝试0个模式: [] 这是我的观点Python 重定向()无效,python,django,django-views,Python,Django,Django Views,重定向函数工作不正常。它正在显示错误 NoReverseMatch at/post/new/Reverse用于带有参数的“post_detail” 未找到“()”和关键字参数“{'pk':9}”。已尝试0个模式: [] 这是我的观点 from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.models import User from django.views.generi
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.models import User
from django.views.generic import View
from django.utils import timezone
from django.contrib.auth import (
authenticate,
get_user_model,
login,
logout,
)
from .forms import UserLoginForm, UserRegisterForm, UserForm, PostForm
from .models import Post
def login_view(request):
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
u = User.objects.get(username=username)
posts = objects.for_user(request.user)
if username and password:
user = authenticate(username= username, password= password)
if not user:
return render(request, 'post/login.html',{'error_message': 'Incorrect username or password'})
if not user.is_active:
return render(request, 'post/login.html', {'error_message': 'Your account has been disabled'})
if user.is_active:
login(request, user)
return render(request, 'post/home.html', {'u' : u, 'posts': posts})
return render(request, 'post/login.html')
class register_view(View):
form_class = UserRegisterForm
template_name = 'post/register.html'
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.save()
new_user = authenticate(username= username, password= password)
if new_user is not None:
if user.is_active:
login(request, new_user)
return redirect('post/home.html')
return render(request, self.template_name, {'form' : form})
def logout_view(request):
logout(request)
form = UserForm(request.POST or None)
return render(request, 'post/login.html', {'form' : form})
def post_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
return render(request, 'post/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'post/post_detail.html', {'post': post})
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'post/post_edit.html', {'form': form})
使用HttpResponseRedirect而不是重定向函数
from django.http import HttpResponseRedirect
return HttpResponseRedirect(reverse('post_detail', kwargs={'pk':pk}))
也许这应该管用。
不能使用重定向函数传递参数。它仅用于重定向。如果要在重定向时传递参数,HttpResponseRedirect是最好的方法。可能会很有用。无法进一步提供帮助,因为您还没有显示URL模式。我就是这样做的。但另一个错误是/post/new/name“reverse”处的NameError未定义。请更正它。但另一个错误是,找不到参数“()”和关键字参数“{pk':12}”的'post_detail'的NoReverseMatch at/post/new/Reverse。尝试了0个模式:[]您可以发布您的 url.py。。另外,如果您在“project/urls.py”中使用名称空间,请尝试将HttpResponseRedirect函数相反的url更改为“your_namespace:url_name”。也许它应该起作用..纠正它。我使用了返回重定向(反向('post_detail',kwargs={'pk':pk}))。谢谢你的帮助很高兴我能帮上忙。。。你能帮我个忙,投我一票吗?