Python 在第三方Django应用程序中自定义模板
我正在django项目中使用第三方应用程序(django social share),但我需要自定义模板。我不知道该怎么做——我尝试的每件事都使用默认模板 当前默认模板存储在:Python 在第三方Django应用程序中自定义模板,python,django,Python,Django,我正在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/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',
),
},
},
]
只需更改模板,您不必使用fork应用程序。只需确保已正确设置模板加载程序。通常情况下,您会喜欢以下内容:() 这意味着(对于您的情况,以
django_social_share/templatetags/post_to_gplus.html
为例)-在查找模板时,django将尝试找到它:
DIRS
因此,如果您在
/templates/django_social_share/templatetags/post_to_gplus.html
中有一个文件,则需要这个文件模板中
dir,如果在已安装的应用程序中
。因此,您可以创建一个例如社交共享\u自定义应用程序,将其添加到已安装的\u应用程序中
,并在以下位置创建模板:
/social\u share\u custom/templates/django\u social\u share/templatetags/post\u to\u gplus.html
这种方法的好处是,您可以在其他项目中轻松地重复使用社会共享\u自定义
模板
目录中文件规定: 模板位于django_social_share/templatetags/post_to_twitter.html中, django_social_share/templatetags/post_to_facebook.html和 django_social_share/templatetags/post_to_gplus.html。您可以覆盖它们 适合你的里程数 因此,您可以直接覆盖它们 如果您需要一些棘手的“覆盖django查找模板的路径”: 首先重命名或移动原始模板。 然后在调试模式下启动django浏览到-you应该得到路径顺序的地方,django试图在调试屏幕中找到模板。 然后尝试将模板放在原始模板之前 或者,如果您有经验: 实例化应用程序类,覆盖模板文件位置并使用新类
或者将原始路径或文件符号链接到新路径或文件。您可以将模板放在项目中的单独应用程序中。Django在你的应用程序中按照在
已安装的应用程序中定义的顺序查找模板,并使用第一个匹配项:
安装的应用程序的顺序非常重要!例如,如果你想
要自定义Django管理员,您可以选择覆盖
标准admin/base_site.html模板,来自django.contrib.admin,
在myproject.polls中使用您自己的admin/base_site.html。那你必须
确保myproject.polls位于django.contrib.admin之前
在已安装的应用程序中,否则将加载django.contrib.admin
首先,你的将被忽略。()
因此,创建一个名为social\u share\u templates
的应用程序,并将其放在django\u social\u share
之前的INSTALLED\u APPS
中。然后将模板添加到此文件夹:
{{project_root}}/social_share_templates/templates/django_social_share/templatetags/post_to_facebook.html
当前配置不起作用的原因是,您的本地应用程序与站点包中的应用程序具有相同的名称。如果您的本地应用程序是实际的python模块,您将无法在站点包中使用该应用程序。否则,Django只会在站点包中的应用程序中查找模板 我一点也不明白你的问题怎么不是你链接的重复。两者的答案都是一样的:要么在你自己的应用程序中找到一种不接触第三方库的自定义方法,要么在第三方库中分叉,进行更改,然后使用分叉。我想我只是不知道如何做这些事情,我正在寻求帮助。我使用了fork库,但我不知道如何使用我的fork,也不知道如何在我自己的应用程序中自定义它。我如何告诉第三方应用程序使用我的模板?好的。。。这是两个完全不同的问题。一个(不改变第三方库就可以做到)不能如此笼统地回答。我们需要知道您正在尝试做什么/更改什么,以了解是否可以在不修改第三方库的情况下进行更改。另一个(如何在GitHub或其他地方分叉项目)我想已经在StackOverflow和其他地方进行了广泛的讨论。我分叉了这个项目,但我不知道如何让我自己的项目使用它(尽管我不认为这是我需要做的相对较小的调整的方式)。理想情况下,我只想将模板重定向到我自己修改过的模板。你的应用程序是否在已安装的应用程序中的django_social_share
之前列出?模板加载程序将在遇到第一个匹配的模板路径时立即停止。选项2似乎是可行的方法,但我无法让它工作。我修改了我的问题,有什么帮助吗?我注意到,从1.8开始,文档已经修改了其中的一些内容;不确定这是否会影响您的答案。那么您使用的是什么版本的django?我使用的是django v 1.9.6。在本例中,模板设置与1.8的模板设置相同。*。您的自定义应用程序是否在已安装的应用程序中
?请注意,应用程序目录
加载器从已安装的应用程序
中未作为egg安装的任何应用程序加载。它不关心实际位置,只要它在python中是可导入的django_social_share
作为一个常见的python模块安装,因此唯一重要的是DIRS
选项和已安装的_应用程序的顺序。问题是应用程序的顺序。文件里肯定没提到。非常感谢。我尝试过这种方法,但它对我不起作用。我收到一个错误导入错误:没有名为social\u share\u templates的模块
。这可能是因为我在用摇尾吗?
{{project_root}}/social_share_templates/templates/django_social_share/templatetags/post_to_facebook.html