我想在登录帐户时将一个模型作为上下文传递给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"),
]
我怎么传递上下文呢?如果我不能告诉我一个替代的方法来做。
3条答案
按热度按时间e4yzc0pl1#
您正在重定向到另一个视图,因此您正在通过您的url传递数据。您不能将您的上下文放在其中,因此您可以直接呈现您的模板:
如果你真的想重定向到另一个url,因为你的上下文只包含所有的
Post
对象,你可以在你的home
视图中构建它。第一个键:
功能:
57hvy0tb2#
将id添加到上下文字典中并传递给redirect。
gcmastyq3#
@Balizok是正确的:你不能通过URL传递上下文,如果没有对它进行url编码,这对于大量的数据来说是一个坏主意。如果你需要主页根据用户是否刚刚登录来显示或不显示帖子,你可以通过以下几种方法来实现:
仅在用户登录时显示帖子:
仅当用户刚刚通过查询参数从登录页重定向时才显示帖子:
第一次
仅当用户刚刚通过会话从登录页面重定向时才显示帖子:
第一个