在Django重定向中传递Id和上下文

nkoocmlb  于 2022-11-26  发布在  Go
关注(0)|答案(3)|浏览(134)

我想在登录帐户时将一个模型作为上下文传递给html页面。我的主页url带有作为url参数的用户ID。但是我不能在重定向中传递任何上下文

查看次数.py

from django.contrib.auth import authenticate,login,logout
from django.contrib import messages

from django.shortcuts import redirect, render
from django.http import HttpResponse
from .models import users
from home.models import Posts
 
def f1(request):
    Post = Posts.objects.all()
    context = {'Post':Post}
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        uz = authenticate(request,username=username, password=password)
        if uz is not None:
            login(request,uz)
            id = users.objects.filter(name=username).values('id')[0]['id']
            return redirect('home',id)  # This Works Fine
            return redirect('home',id,context) # This is not Working
        else:
            messages.error(request,"Wrong Credentials")
    return render(request,'login.html')

网址.py

from django.contrib.auth import logout
from django.urls import path
from . import views

urlpatterns=[
    path('<str:users_id>/',views.func,name="home"),
]

我怎么传递上下文呢?如果我不能告诉我一个替代的方法来做。

e4yzc0pl

e4yzc0pl1#

您正在重定向到另一个视图,因此您正在通过您的url传递数据。您不能将您的上下文放在其中,因此您可以直接呈现您的模板:

return render(request, "home.html", context)

如果你真的想重定向到另一个url,因为你的上下文只包含所有的Post对象,你可以在你的home视图中构建它。

第一个键:

return redirect('home',id)

功能:

context = {'Post': Posts.objects.all()}
return render(request, "home.html", context)
57hvy0tb

57hvy0tb2#

将id添加到上下文字典中并传递给redirect。

context = {'Post':Post, 'Id':id}

return redirect('home', context)
gcmastyq

gcmastyq3#

@Balizok是正确的:你不能通过URL传递上下文,如果没有对它进行url编码,这对于大量的数据来说是一个坏主意。如果你需要主页根据用户是否刚刚登录来显示或不显示帖子,你可以通过以下几种方法来实现:
仅在用户登录时显示帖子:

def home(request, id):
    context = {}
    if request.user.is_authenticated:
        context["Post"] = Posts.objects.all()
    return render(request, "home.html", context)

仅当用户刚刚通过查询参数从登录页重定向时才显示帖子:
第一次
仅当用户刚刚通过会话从登录页面重定向时才显示帖子:
第一个

相关问题