【问题标题】:Show a Form in my template base using Django使用 Django 在我的模板库中显示表单
【发布时间】:2011-09-04 04:41:28
【问题描述】:

在我的基本模板中,我想包含一个搜索表单。

我已经创建了它,但我想知道是否有比将 form 传递给扩展基础的所有模板更好的选择?

【问题讨论】:

    标签: django django-templates django-forms


    【解决方案1】:

    是的,这就是模板上下文处理器的用处。它们允许您将变量传递给所有模板,而无需指定。

    settings.py

    TEMPLATE_CONTEXT_PROCESSORS = (
        'django.contrib.auth.context_processors.auth',
        'django.core.context_processors.debug',
    
        ...
    
        'some_app.context_processors.search_form',
    )
    

    context_processors.py(你可以把它放在你的一个应用中,或者如果你喜欢的话,放在主目录中)

    from my_forms import MySearchForm
    
    def search_form(request):
    return {
         'search_form' : MySearchForm()
    }
    

    现在您可以在所有模板中使用 {{ search_form }}

    【讨论】:

    • 有趣。我从未真正使用过上下文处理器。我得开始这样做了。
    • 只是一个问题:我可以更改search_form 函数的签名吗?我的意思是,我可以添加更多参数吗?有时我想绑定表单而不是将其创建为空。
    • 猜猜,应该是这样的:return {'search_form': MySearchForm()}
    • 当返回表单时 search_form 应该是 'search_form'
    【解决方案2】:

    假设它是静态的,您可以将其制成返回表单的过滤器。然后它看起来像这样:

    <body>
    ...
    {% import_form_template %}
    ...
    </body>
    

    或者类似的东西。如果你需要它更动态一点,你也可以让它接受参数:

    {% import_form_template arg1 arg2 arg3 %}
    

    https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-tags

    【讨论】:

    • 嗯.. 很有趣。我现在就开始工作,我会尽快告诉你进展如何:)
    • 是的,让我知道。我从来没有真正花时间构建一个实际的模板标签。
    【解决方案3】:

    为什么不使用自定义context processor

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 2021-04-01
      • 2021-09-06
      • 1970-01-01
      • 2021-07-25
      • 2018-04-07
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多