创建Django应用程序设置页面

时间:2018-04-23 02:11:00

标签: python django django-models

我有一个Django应用程序,我试图在网站加载时使一些特定的模型信息可以更改。例如,我希望能够根据我在Django管理面板上所做的更改来更改页面上的某些图像(横幅等)。此外,我还想为我的社交媒体链接创建一个预先填充的迁移列表,该列表可以在django管理页面中编辑。我的具体实例是针对我的所有社交媒体链接。我想将我的社交媒体链接放在模型“Facebook Url”='www.facebook.com/mypage中。然后我想使用点符号{{project_settings.facebook.url}}将这些链接放在整个页面中。例如。最简单的方法是什么。我不认为我想在所有视图中放置上下文,因为我必须为每个我希望可用的页面执行此操作。对于我的情况页脚在每页上。背景图像也在几个不同的页面上。

1 个答案:

答案 0 :(得分:0)

通过创建如下所示的CustomTextCustomImage模型,我已经完成了您要做的工作:

class CustomText(models.Model):
    name = models.SlugField()
    plain_text = models.TextField("Plain/Markdown Text", blank=True)
    html_text = models.TextField("HTML Text", blank=True)
    auto_render = models.BooleanField("Render to HTML using Markdown (on save)", default=True)
    (... implementation of text->html omitted )

class CustomImage(models.Model):
    name = models.SlugField()
    description = models.TextField("Description", null=True, blank=True)
    image = models.ImageField("Custom Image", upload_to="custom_images/", null=True, blank=True)

然后我添加了myapp/templatetags/custom_resources.py,这是一对模板标签,用于从这些模型中检索文字或图片:

from django import template
from django.utils.safestring import mark_safe

from myapp.models import CustomImage, CustomText

register = template.Library()

@register.simple_tag
def custom_image(image_name):
    cimage = CustomImage.objects.filter(name=image_name).first()
    return cimage.image.url if cimage else "custom_image_%s_not_found" % image_name

@register.simple_tag
@mark_safe
def custom_text(text_name):
    text = CustomText.objects.filter(name=text_name).first()
    return text.html_text if text else "Custom text <%s> not found." % text_name

最后,在模板中,加载模板标签,然后将模板标签与适当的slug一起用于所需的资源。

{% load custom_resources %}
...
{% custom_text 'custom_text_slug' %}