Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在第三方Django应用程序中自定义模板_Python_Django - Fatal编程技术网

Python 在第三方Django应用程序中自定义模板

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项目中使用第三方应用程序(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',
            ),
        },
    },
]

只需更改模板,您不必使用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自定义

  • 在通过pip(或其他方式)安装的应用程序的
    模板
    目录中


  • 文件规定:

    模板位于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