栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Django视图-首先从调用应用程序的目录加载模板

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django视图-首先从调用应用程序的目录加载模板

原因是app_directories加载程序与将每个应用程序的模板文件夹添加到TEMPLATE_DIRS设置基本相同,例如

TEMPLATE_DIRS = (    os.path.join(PROJECT_PATH, 'app1', 'templates'),    os.path.join(PROJECT_PATH, 'app2', 'template'),    ...    os.path.join(PROJECT_PATH, 'templates'),)

问题是,正如你提到的,index.html将始终在app1 / templates / index.html中找到,而不是其他任何应用程序。没有简单的方法可以魔术地解决此问题,而无需修改app_directories加载程序并使用自省或传递应用程序信息,这变得有些复杂。一个更简单的解决方案:

  • 保持你的settings.py原样
  • 在每个应用程序的模板文件夹中添加带有该应用程序名称的子目录
  • 在“ app1 / index.html”或“ app2 / index.html”等视图中使用模板

举一个更具体的例子:

project    app1        templates app1     index.html     add.html     ...        models.py        views.py        ...    app2        ...

然后在视图中:

def index(request):    return render_to_response('app1/index.html', locals())

你甚至可以编写包装器来自动在所有视图之前添加应用程序名称,甚至可以扩展为使用自省功能,例如:

def render(template, data=None):    return render_to_response(__name__.split(".")[-2] + '/' + template, data)def index(request):    return render('index.html', locals())

_ name ___。split(“。”)[-2]假定文件在软件包中,因此它将例如’app1.views’转换为’app1’以添加为模板名称。这还假设用户在不重命名模板目录中的文件夹的情况下将永远不会重命名你的应用程序,这可能不是一个安全的假设,在这种情况下,只需将模板目录中的文件夹名称硬编码即可。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390571.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号