1

我有一个在网站的许多部分使用的父模板,称为base.html. 该模板包含许多功能组件,例如触发不同表单的按钮(在模式窗口内)允许用户上传不同类型的内容等。我希望用户能够从站点的几乎任何部分单击这些按钮(来自所有继承自base.html) 的模板。

我编写了一个处理站点主页的视图HomeView(它呈现homepage.html,它继承自base.html)。我在这个视图中写了一堆功能,它处理所有的上传。

由于许多模板将继承自base.html,因此具有所有相同的功能,我是否必须将数百行代码从 复制并粘贴HomeView到呈现所有其他页面的视图中?

一定有更好的方法,对吧?

如何确保父基础模板中的功能对于调用从该基础模板继承的子模板的所有视图都适用?

4

5 回答 5

1

您可以将所有代码行HomeView放在一个单独的函数中func
,让我们func返回一个包含所有需要的上下文变量的字典,
并在需要时调用它,这样您HomeView就会看起来像这样:

def HomeView(request):
  dict = func(request)
  ... # rest of code that is not common with other views

func看起来像:

def func(request):
  #all repeated code
  #put all needed variables in a dictionary and return it
  dict = {'var1': 4, 'var2': "a String" ...}
  return dict
于 2013-02-03T18:39:27.620 回答
0

我相信将您的上传相关功能分离到单独的视图中将是更好的方法。这样,您的所有模板(继承自base.html)都将引用适当的视图进行上传。

您可以使用HTTP_REFERER标头从上传视图重定向到适当的页面。

于 2013-02-01T04:21:21.587 回答
0
  1. 使用TemplateResponse而不是HttpResponsein home_view。这样,您将能够更新上下文并在响应上切换模板。

  2. home_view像这样在其他视图中调用:

    from django.template.response import TemplateResponse
    
    def other_view( request ):
    
        #produce other_context
    
        t = home_view( request )
        t.context.update( other_context )
        t.template = 'other_template.html'
        return t
    
于 2013-02-01T09:34:24.453 回答
0

您可以通过在每个视图中要求唯一值或使用请求会话来在一个视图中呈现多个模板。

于 2013-02-01T11:37:38.053 回答
0

在 base.html 上使用 ajax 加载功能部分。

这样,您就有了一个专门处理这些功能的 view_method。

于 2013-02-01T12:27:24.243 回答