模板 Django 应用程序扩展模板 django 项目

Posted

技术标签:

【中文标题】模板 Django 应用程序扩展模板 django 项目【英文标题】:Template Django application extending template django project 【发布时间】:2013-06-13 10:28:55 【问题描述】:

我是 django 的初学者,我需要一些建议。

我正在尽可能多地尝试创建可重用的 django 应用程序,这些应用程序将用于多个不同的项目。但我不知道如何处理模板。

如果我有一个应用程序管理用户,我认为允许添加、删除或列出用户的模板应该位于应用程序中而不是项目中。模板项目应该定义页眉、页脚和一般组织(如果我错了,请纠正我)。

但是,如果我想使用模板继承,我将在我的应用程序模板中扩展项目模板:

% 扩展“base.html”% % 块内容 % ... % endblock %

所以在开发我的可重用应用程序时,我假设我的项目将有一个名为base.html的模板,其中包含一个块content,在我看来,这些信息不应位于应用程序级别,而应位于项目级别。在某些项目中,我希望在块内容中显示用户,但在其他项目中不一定。例如,我可能希望在同一页面的多个位置显示用户信息...

你如何开发你的应用程序模板来绕过这个限制?

提前致谢,

比尔

【问题讨论】:

这个***.com/questions/16498176/… 可能对你有帮助 【参考方案1】:

您所描述的可能最好使用自定义模板标签来解决,特别是inclusion tags

【讨论】:

【参考方案2】:

我会做一个包含页眉和页脚的基本 html 模板,以及许多扩展基本模板的可重用模板,包含我需要的不同布局。我还会创建reusable components(磁贴、数据网格...)。

对于模板:

base.html

<!doctype HTML>
<html>
<head>
....
</head>
<body>
% block content %
</body>
</html>

3_columns.html

% extends "project/base.html" %
% block content %

<div class="line">
    <div class="column">% block col1 %</div>
    <div class="column">% block col2 %</div>
    <div class="column">% block col3 %</div>
</div>

% endblock %

2_lines.html

% extends "project/base.html" %
% block content %

<div class="line">% block line1 %</div>
<div class="line">% block line2 %</div>

% endblock %

一个基本的自定义组件:

模板标签/custom.py

import django
from django.template.defaulttags import register

@register.inclusion_tag('components/custom.html')
def custom(params):
    context = 
        'a': params['a'],
        'b': params['b']
    
    return context

模板/组件/custom.html

<div class="custom">
<label> a 
    <input name= b 
</label>
</div>

【讨论】:

【参考方案3】:

django-admin.py collectstatic

阅读docs

使用启用的查找器搜索文件。默认是查看 STATICFILES_DIRS 中定义的所有位置以及 INSTALLED_APPS 设置指定的应用程序的“静态”目录。

【讨论】:

我的问题与静态文件无关。我的问题是关于扩展项目模板。

以上是关于模板 Django 应用程序扩展模板 django 项目的主要内容,如果未能解决你的问题,请参考以下文章

Django模板扩展了错误的模板

Django 模板继承(扩展的位置)

从项目根 Django 扩展模板

Django:如何重新分发包含可扩展 HTML 模板的项目/应用程序?

CSS DJANGO 和扩展模板

Django DRY - 如何在 Django 模板中扩展两个 .html 文件?