Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
Django 是否为第三方应用程序模板标记重命名/添加前缀?_Django_Django Templates_Django Apps_Django Template Filters_Templatetags - Fatal编程技术网

Django 是否为第三方应用程序模板标记重命名/添加前缀?

Django 是否为第三方应用程序模板标记重命名/添加前缀?,django,django-templates,django-apps,django-template-filters,templatetags,Django,Django Templates,Django Apps,Django Template Filters,Templatetags,是否可以添加前缀或重命名第三方应用程序模板标记 说明: 我们在项目中使用了django_表2。为了提高性能,我们决定从django_表2迁移到django_数据表() 我们希望对几个表使用django_表2,并将其余的表迁移到django_数据表中 问题在于django_table 2和django_datatable使用相同的模板标记{%render_table%}。当我们深入研究时,可能会有更多的问题。我认为最简单的方法是将代码拆分为多个模板(可能包括),这样您就不会在同一个文件中同时包含{

是否可以添加前缀或重命名第三方应用程序模板标记

说明:

我们在项目中使用了
django_表2
。为了提高性能,我们决定从
django_表2
迁移到
django_数据表
()

我们希望对几个表使用
django_表2
,并将其余的表迁移到
django_数据表中


问题在于
django_table 2
django_datatable
使用相同的模板标记
{%render_table%}
。当我们深入研究时,可能会有更多的问题。

我认为最简单的方法是将代码拆分为多个模板(可能包括),这样您就不会在同一个文件中同时包含
{%load django_tables%}
{%load table_tags%}
(来自django datatable)。这不需要任何花哨的东西,可以与任何Django版本一起使用

至于重命名,我认为没有现成的内置方法。有一种语法可以只导入特定的标记/过滤器(
{%load render\u table from table\u tags%}
),但无法重命名它们

一种方法是实现自定义加载程序。您可能应该看看源代码,并复制它,使用自定义的
{%load\u ex render\u table as render\u table\u dt from table\u tags%}
语法实现您自己的
load\u ex
。基本上,您所要做的就是根据提供的规则添加扩展语法解析和重命名
lib.tags
键(这只是一个dict,从标记名映射到函数)

或者——一种更脏的方法——勾入。在这里,您有库
name
parser
实例,如下所示:

# Somewhere in your project's init code...
if not hasattr(defaulttags.find_library, "_is_hacked"):
    real_find_library = defaulttags.find_library
    def find_library(parser, name):
        lib = real_find_library(parser, name)
        if name == "django_tables2" and "render_table" in lib.tags:
            lib.tags["render_table2"] = lib.tags["render_table"]
            del lib.tags["render_table"]
        return lib
    find_library._is_hacked = True
    defaulttags.find_library = find_library

这应该足以重命名标记。我根本没有测试过代码(如果有任何打字错误或一些错误,很抱歉),但是你应该明白了。

我相信最简单的方法就是将代码拆分为多个模板(可能包括),这样你就不会同时拥有
{%load django_tables%}
{%load table_tags%}
(来自django datatable)在同一个文件中。这不需要任何花哨的东西,可以与任何Django版本一起使用

至于重命名,我认为没有现成的内置方法。有一种语法可以只导入特定的标记/过滤器(
{%load render\u table from table\u tags%}
),但无法重命名它们

一种方法是实现自定义加载程序。您可能应该看看源代码,并复制它,使用自定义的
{%load\u ex render\u table as render\u table\u dt from table\u tags%}
语法实现您自己的
load\u ex
。基本上,您所要做的就是根据提供的规则添加扩展语法解析和重命名
lib.tags
键(这只是一个dict,从标记名映射到函数)

或者——一种更脏的方法——勾入。在这里,您有库
name
parser
实例,如下所示:

# Somewhere in your project's init code...
if not hasattr(defaulttags.find_library, "_is_hacked"):
    real_find_library = defaulttags.find_library
    def find_library(parser, name):
        lib = real_find_library(parser, name)
        if name == "django_tables2" and "render_table" in lib.tags:
            lib.tags["render_table2"] = lib.tags["render_table"]
            del lib.tags["render_table"]
        return lib
    find_library._is_hacked = True
    defaulttags.find_library = find_library

这应该足以重命名标记。我根本没有测试过代码(如果有任何打字错误或错误,请原谅),但您应该知道了。

您可以使用其他名称重新注册标签:

from table.templatetags.table_tags import register, render_table

register.tag('datatable_render_table', render_table)

您应该将它放在启动期间执行的某个位置,例如在
AppConfig.ready()

中,您可以使用其他名称重新注册标记:

from table.templatetags.table_tags import register, render_table

register.tag('datatable_render_table', render_table)

您应该将它放在启动期间执行的某个位置,例如在
AppConfig.ready()

中,这是一个非常好的解决方案。只需补充一点,在django_tables标记之前加载datatable标记是必要的,因为render_table标记不是未注册的。这是一个非常好的解决方案。只需添加一点,在django_tables标记之前加载datatable标记是必要的,因为render_table标记未被注销。