我现在正在开发一个网站,一旦您登录,搜索栏将始终出现在页面顶部。我想知道在 Django 中设计这个范例的最佳方法是什么。目前,我有一个名为 forms.py 的单独文件,位于我的文件夹层次结构中的 settings.py
级别。几乎在每个 View 中,我都必须添加:
from forms.py import SearchForm
然后在每个渲染调用中,我必须传递:
form = SearchForm()
return render('somepage.html',{"search_form" : form},c=RequestContext())
我已经四处寻找更好的方法来做到这一点,但我无法找到任何有用的东西。我有一种感觉,我当前使用的设计并不理想,因为我需要在几乎每个 View 中作为参数导入/传递。
表单是在 base.html
中定义的,因此我使用模板继承,但据我所知,我仍然需要将表单对象传递给每个渲染。
最佳答案
Use a context processor
使用 RequestContext
将您的搜索表单添加到所有 View 的上下文中,您正在使用的新 render
会自动执行此操作。
def FormContextProcessor(request):
if request.user.is_authenticated():
return {'form': SearchForm() }
return {}
你说它几乎在所有 View 中都使用,并且这并不是一个实例化表单的昂贵操作,所以我会使用这个解决方案。
关于python - 避免在 django 的每个渲染中传递 RequestContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5406393/