python - 避免在 django 的每个渲染中传递 RequestContext

标签 python django

我现在正在开发一个网站,一旦您登录,搜索栏将始终出现在页面顶部。我想知道在 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/

相关文章:

python - 如何用系列的相应值替换列数据(系列的索引)

python - Anaconda vs. EPD Enthought vs. Python 的手动安装

python - 查找固定大小的所有独特组合以达到给定的平均范围

python - 在Python中不使用list、iter从字典中检索第一个键值对

python - 地理名称数据库(城市、兴趣点)

python - 将图像数组保存在文件中的最佳方法(Python)

django - 在 NoSql 中使用哪个图(Mcd、Merise、UML)

php - 将 URL 转换为屏幕截图(脚本)

python - 在 $PATH 中找不到 Docker 组合可执行文件": unknown

python - Django Oracle App 提供 ORA-03113 和 ORA-03135