如何使用包含标记将表单加载到Django基模板以避免递归错误?

2024-06-16 11:36:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经尝试过在许多方面使用inclusion标记,比如分离html文件并将其包含在基本模板(layout.html)中,甚至直接包含在基本模板(layout.html)中,我不断得到
递归错误/ 超过最大递归深度

应用程序内/forms.py

class UserSettingsForm(forms.ModelForm):
class Meta:
    model = UserSettings
    fields = ['theme_color','text_color']
    widgets = {
        'theme_color':forms.Select(attrs={'class':'form-control'}),
        'text_color':forms.Select(attrs={'class':'form-control'})
    }
    error_messages = {
        NON_FIELD_ERRORS : {
            'unique_together': "%(model_name)s's %(field_labels)s are not unique.",
        }
    }

应用内/templatetags/theme.py

@register.inclusion_tag('layout.html')
def settings_form():
    set_form = UserSettingsForm()
    return {'set_form':set_form}

在layout.html中

{% load theme %}
...
<form action="{% url 'set_settings' %}" method="post">
   {% csrf_token %}}
   {% settings_form %}
   {{set_form}}
</form>

我希望表单显示在this layout.html扩展到的所有页面上,因此从视图发送表单是不可能的

我一直听说RequestContext,但我不知道如何使用它来呈现它。如果你知道,请描述我应该在哪里创建这个新的文件为这个功能来实现,我应该怎么做


Tags: 文件pyform模板modelsettingshtmlforms
1条回答
网友
1楼 · 发布于 2024-06-16 11:36:22

在一位已知朋友的帮助下,我尝试使用上下文处理器,通过在app中创建一个context.py文件并编写一个简单的两行代码,将表单添加到上下文处理器中

def settings_form(request):
    return {'set_form': UserSettingsForm()}

然后在设置中将app.context.settings_form添加到上下文中。 现在我可以轻松地渲染窗体。花了很多时间来理解一个2行代码。Python真的比我想象的简单

相关问题 更多 >