【问题标题】:redirect() is not working重定向()不起作用
【发布时间】:2017-10-08 21:59:20
【问题描述】:

重定向功能不正常,显示错误

NoReverseMatch at /post/new/ Reverse for 'post_detail' with arguments '()' 和关键字参数 '{'pk': 9}' 未找到。尝试了 0 种模式: []

这是我的观点.py

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})

【问题讨论】:

  • This answer 可能有用。无法提供进一步帮助,因为您尚未显示您的 URL 模式。

标签: python django django-views


【解决方案1】:

使用 HttpResponseRedirect 代替重定向功能,

from django.http import HttpResponseRedirect

return HttpResponseRedirect(reverse('post_detail', kwargs={'pk':pk}))

也许应该可以。 您不能使用重定向功能传递参数。它仅用于重定向。如果您想在重定向中传递参数,HttpResponseRedirect 是最好的方法。

【讨论】:

  • 我做到了。但是在 /post/new/ name 'reverse' 处出现另一个错误,说 NameError 未定义
  • 已更正。但是在 /post/new/ Reverse 出现另一个错误,说 NoReverseMatch 为带有参数 '()' 和关键字参数 '{'pk': 12}' 的 'post_detail' 未找到。尝试了 0 个模式:[]
  • 你能发布你的 urls.py 吗?另外,如果你在“project/urls.py”中使用命名空间,那么尝试将 HttpResponseRedirect 函数反向中的 url 更改为“your_namespace:url_name” .也许它应该做的伎俩..
  • 已更正。我使用了return redirect(reverse('post_detail' , kwargs={'pk':pk}))。感谢您的帮助
  • 很高兴我能帮上忙...你能帮我一个忙并给我一个赞成票吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-12
  • 2011-08-27
  • 2014-08-30
  • 2012-05-29
  • 2013-01-10
相关资源
最近更新 更多