Django:在模型和视图中存储静态文本

时间:2016-02-23 17:53:30

标签: django

我使用django-tinycontent在模板中存储小块文本,但我找不到应用程序或从数据库中保存模型,表单和视图中的静态文本的方法。

例如:

title = forms.CharField(
    label="Title",
    required=True,
    widget=forms.TextInput(attrs={'placeholder': ''})
)

如何在数据库中保存文本标题,因为如果我需要更改该标签的文本,我不想要新版本。

1 个答案:

答案 0 :(得分:0)

听起来你正在建立一个CMS;所以个人而言,我更喜欢使用像Django CMSdjangocms-forms这样的现有软件包。无论如何,如果我们正在构建它,这是一个简单的方法:

模型

class FieldConfig(models.Model):
    form = models.CharField(max_chars=64)
    field = models.CharFields(max_chars=64)
    label = models.CharFields(max_chars=64)
    placeholder = models.CharFields(max_chars=64)

Mixin

class FieldConfigMixin(object):
    def __init__(self, *args, **kwargs):
        super(FieldConfigMixin, self).__init__(*args, **kwargs)

        form_name = self.__class__.__name__
        fconfig = FieldConfig.objects.filter(form=form_name)
        # for every matching form/fields, override the values
        for conf in fconfig:
            if conf.field not in self.fields:
                continue

            field = self.fields[conf.field]
            field.label = conf.label
            field.widget.attrs['placeholder'] = conf.placeholder
            # ... and so on (more form/field config as required)

用法

假设你有一些你想要覆盖字段元信息的表单,只需在上面的类中混合并瞧,表单字段现在是可配置的

class SomeForm(FieldConfigMixin, forms.Form):
     title = forms.CharField(
         label="Title",
         required=True,
         widget=forms.TextInput(attrs={'placeholder': ''})
     )

# Test it out

assert SomeForm().fields['title'].label == 'Title'
FieldConfig.objects.create(form='SomeForm', field='title', label='Foo Title')
assert SomeForm().fields['title'].label == 'Foo Title'

免责声明 :这是我的头脑,我还没有测试过,这可能很难完全失败:)只是说

显然,这是一个非常乐观的实施,在现实生活中,你可能会发现自己一个接一个地处理一个角落的情况。因此,我的建议是尝试使用我上面提到的现有(尽可能多的用户)。