Python Django设计问题-搜索栏
我正在开发一个网站现在,一旦你登录,搜索栏将始终出现在页面的顶部。我想知道在Django设计这个范例的最佳方式是什么。目前,我有一个名为forms.py的单独文件,它位于文件夹层次结构的settings.py级别。在几乎所有的观点中,我必须补充一点Python Django设计问题-搜索栏,python,django,Python,Django,我正在开发一个网站现在,一旦你登录,搜索栏将始终出现在页面的顶部。我想知道在Django设计这个范例的最佳方式是什么。目前,我有一个名为forms.py的单独文件,它位于文件夹层次结构的settings.py级别。在几乎所有的观点中,我必须补充一点 from forms.py import SearchForm 然后在每次渲染调用中,我都必须通过 form = SearchForm() return render('somepage.html',{"search_form" : form},c
from forms.py import SearchForm
然后在每次渲染调用中,我都必须通过
form = SearchForm()
return render('somepage.html',{"search_form" : form},c=RequestContext())
我四处寻找了一个更好的方法,但是我很难找到任何有用的东西。我有一种感觉,我使用的当前设计并不理想,因为我需要在几乎所有视图中作为参数导入/传递
表单是在base.html中定义的,因此我使用模板继承,但我仍然需要尽可能地将表单对象传递给每个渲染
感谢高级版。使用django<1.3,您可以拥有一个装饰程序,它可以处理html的呈现:
def search_render(function):
# return a decorated function which will take template from the args
# take output of the inner function (this should be a dictionary e.g. data = ..
# instantiate SearchForm
# add SearchForm instance to the data dictionary
# and return render(template, data, RequestContext(request))
@search_render(tamplate='somepage.html')
def my_other_view(request):
return {'data':'value'}
对于django>=1.3,您可以使用类似的方法使用基于类的视图
使用RequestContext
将搜索表单添加到所有视图的上下文中,您正在使用的新呈现将自动执行该操作
def FormContextProcessor(request):
if request.user.is_authenticated():
return {'form': SearchForm() }
return {}
您说过它几乎在所有视图中都会使用,而且实例化表单的操作成本不高,所以我会使用此解决方案。但此解决方案并没有解决代码的第二部分-渲染渲染不是问题:“表单是在base.html中定义的,所以我使用的是模板继承”不是模板本身,而是调用模板,“return render…”部分调用render
,指定一个模板,并返回结果是每个django模板涉及的响应的一部分,而不是问题的一部分:)不过,您不明白,您的解决方案只解决了问题的一部分。虽然很简单。eot。