我在我的Django项目中使用第三方应用程序(django-social-share),但我需要自定义模板。我不知道该怎么做 - 我尝试的一切都使用默认模板。
当前的默认模板存储在:
django-social-share/django_social_share/templates/django_social_share/templatetags/post_to_facebook.html.
我已经定制了一个:
{{project_root}}/{{app_name}}/templates/django_social_share/templatetags/post_to_facebook.html
我的模板设置:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.request',
'mainsite.context_processors.google_api'
],
'loaders': (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
'django.template.loaders.eggs.Loader',
),
},
},
]
答案 0 :(得分:5)
要更改模板,您不必分叉应用。只需确保您已正确设置模板加载器。通常你喜欢这样的东西:(documentation)
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
'django.template.loaders.eggs.Loader',
],
这意味着(以你的情况为例django_social_share/templatetags/post_to_gplus.html
) - 在寻找模板时,Django会尝试找到它:
在项目的模板目录/目录中,在DIRS
中指定
因此,如果您在<project_root>/templates/django_social_share/templatetags/post_to_gplus.html
中有一个文件,则需要使用此文件。
在您当地的&#39;应用templates
目录,如果在INSTALLED_APPS
中。所以你可以创建例如social_share_custom
应用,将其添加到INSTALLED_APPS
并在以下位置创建模板:
<project_root>/social_share_custom/templates/django_social_share/templatetags/post_to_gplus.html
这种方法的好处是您可以在其他项目中轻松地重复使用social_share_custom
。
templates
目录中的
答案 1 :(得分:3)
您可以将模板放在项目中的单独应用中。 Django按照INSTALLED_APPS
中定义的顺序在您的应用中查找模板,并使用第一个匹配项:
INSTALLED_APPS的顺序非常重要!例如,如果你想要 要自定义Django管理员,您可以选择覆盖 标准admin / base_site.html模板,来自django.contrib.admin, 在myproject.polls中使用您自己的admin / base_site.html。那你必须 确保你的myproject.polls出现在django.contrib.admin之前 在INSTALLED_APPS中,否则将加载django.contrib.admin 首先,你的将被忽略。 (source)
所以创建一个应用程序,例如social_share_templates
,并将其放在INSTALLED_APPS
之前 django_social_share
。然后将模板添加到此文件夹:
{{project_root}}/social_share_templates/templates/django_social_share/templatetags/post_to_facebook.html
您当前配置不起作用的原因是您的本地应用与site-packages中的应用具有相同的名称。如果您的本地应用程序是一个实际的python模块,您将无法在站点包中使用该应用程序。否则,Django只是在site-packages中的应用程序中查找模板。
答案 2 :(得分:0)
文档说明:
模板位于django_social_share / templatetags / post_to_twitter.html, django_social_share / templatetags / post_to_facebook.html和 django_social_share / templatetags / post_to_gplus.html。你可以覆盖它们 适合你的里程。
所以你可以直接覆盖它们。
如果你想要一些棘手的&#34;覆盖django寻找模板的路径&#34;: 首先重命名或移动原始模板。 然后在调试模式下启动django浏览到 - 你应该获取路径的地方 - django试图在调试屏幕中找到模板的顺序。 然后尝试将模板放在原始模板之前。
或者如果您有经验: 实例化app-Class,覆盖template-files-location并使用新类。
或将原始路径或文件符号链接到新路径或文件。