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