[D]请教一个django login后在模板中显示问题

mirage_o 2012-05-12 11:30:47
使用django自带的验证系统auth.login(request, user)登录后,如何在模板中显示该用户信息呢?
查看资料说是需要通过 RequestContext 在模板的context中使用
RequestContext 在这应该如何处理呢
我现在的作法是在一个公有py文件中加入
def custom_proc(request):
return {
'user': request.user
}

然后再view中添加
return render_to_response("showBlogList.html", locals(),context_instance = RequestContext(request, processors = [custom_proc]))

这种方式可行,但比较麻烦,每个view中都需要写入这句话,不知道是不是一个标准的方法

请各位高手指点,谢谢
-------------------------------
Double行动:
原帖分数:20
帖子加分:20
...全文
287 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mirage_o 2012-06-03
  • 打赏
  • 举报
回复
搞定了, 必须要在后边加一个RequestContext才能显示user
return render_to_response("funBlog.html", locals(),context_instance=RequestContext(request))
georgema 2012-06-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 8 楼 的回复:

引用 6 楼 的回复:

有试过在TEMPLATE_CONTEXT_PROCESSORS里边加django.contrib.auth.context_processors.auth,但在模板里边还是找不到user变量,难道是在views里边不能使用return render_to_response,必须用RequestContext?

当然可以用ren……
[/Quote]
模板上的user未必有username属性,因为有可能当前用户未成功登录,这个user可能是一个AnonymousUser实例。
georgema 2012-05-25
  • 打赏
  • 举报
回复
另外你的render_to_response使用方法是否正确?使用TEMPLATE_CONTEXT_PROCESSORS后,正确的调用方法为return render_to_response("showBlogList.html", locals(),context_instance = RequestContext(request))
georgema 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

有试过在TEMPLATE_CONTEXT_PROCESSORS里边加django.contrib.auth.context_processors.auth,但在模板里边还是找不到user变量,难道是在views里边不能使用return render_to_response,必须用RequestContext?
[/Quote]
当然可以用render_to_response,不过自从django1.3以来推荐使用render。我的问题是你怎么知道模板里找不到user变量?你看到了什么错误信息?
mirage_o 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 6 楼 的回复:

有试过在TEMPLATE_CONTEXT_PROCESSORS里边加django.contrib.auth.context_processors.auth,但在模板里边还是找不到user变量,难道是在views里边不能使用return render_to_response,必须用RequestContext?

当然可以用render_to_response,……
[/Quote]

在页面使用{{ user.username }} 按正常情况应该会显示登录用户名的,但是我这无法显示
mirage_o 2012-05-23
  • 打赏
  • 举报
回复
settings.py
TEMPLATE_CONTEXT_PROCESSORS = {
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages"
}

views.py
def authLogin(request):
user = auth.authenticate(username='admin',password='admin')
if user is not None:
return render_to_response("showinfo.html")

页面使用{{ user.username }}仍然无法得到登录名
mirage_o 2012-05-21
  • 打赏
  • 举报
回复
有试过在TEMPLATE_CONTEXT_PROCESSORS里边加django.contrib.auth.context_processors.auth,但在模板里边还是找不到user变量,难道是在views里边不能使用return render_to_response,必须用RequestContext?
georgema 2012-05-18
  • 打赏
  • 举报
回复
楼上的尽给馊主意。

只要你的settings.py里的TEMPLATE_CONTEXT_PROCESSORS一项中有django.contrib.auth.context_processors.auth,模板里自然就有user这样一个变量。详细说明在这里:https://docs.djangoproject.com/en/dev/topics/auth/#authentication-data-in-templates
wklken 2012-05-17
  • 打赏
  • 举报
回复
继承持有render_to_response方法的这个类,并覆写这个方法,得到一个自己的处理类
context_instance 直接搞成默认的
然后,需要用到这种方式的话,使用自定义的类,否则使用默认的

这样改动不是很多
mirage_o 2012-05-16
  • 打赏
  • 举报
回复
木有人了么
cliffbaby 2012-05-13
  • 打赏
  • 举报
回复
把user 放在 render_to_response的第二个参数 lcoals 里不行吗?

context = {
.....,
'user':request.user,
}
...response_to_response(.... , context, ...)
mirage_o 2012-05-13
  • 打赏
  • 举报
回复
应该不行吧,因为每个页面需要的值不一样,第二个参数直接写locals()可以直接把这个函数内所有的变量都传到页面,如果将user放在第二个参数,其他的数据传过去更麻烦

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧