【问题标题】:Django; How can i serve templates/images/css/js from inside custom 'skin' directory?姜戈;我如何从自定义“皮肤”目录中提供模板/图像/css/js?
【发布时间】:2011-08-23 09:18:35
【问题描述】:

我正在尝试制作一个可换肤的 Django 项目。

我遇到的问题是弄清楚如何从皮肤目录中提供文件,而不是从媒体目录中提供文件,以便所有皮肤的图像/css/js 文件都可以驻留在皮肤的文件夹。

用户应该能够选择皮肤名称,最好只更改“设置”中的 SKIN_NAME 变量(可能稍后更改 .ini 文件)。并且所有模板/css/images 都将从该目录加载。

我想能够查看原始模板会很糟糕,所以也许它应该是皮肤文件夹内的“媒体”目录,里面有子文件夹“css”、“js”和“images”,它会从那里送达。

尽管我有一些 Python 经验,但我对 Django 框架还是很陌生,因此非常感谢任何关于如何完成/可以完成的输入。

【问题讨论】:

    标签: python django web-applications frameworks


    【解决方案1】:

    首先,您应该将静态文件保存在 static 文件夹中,并且只使用 media 上传内容。

    然后在您的static 文件夹中,您可以为每个皮肤创建一个文件夹,其中包含所需的所有 CSS、图像和 JS。

    只需从您的皮肤模板导入前缀为 {{ STATIC_URL }} 和您的皮肤名称的文件。

    <link rel="stylesheet" src="{{ STATIC_URL }}name_of_your_skin/css/style.css" />
    

    如果您的皮肤不需要单独的模板,您甚至可以这样做:

    <link rel="stylesheet" src="{{ STATIC_URL }}{{ skin_name }}/css/style.css" />
    

    【讨论】:

    • 在“设置”文件中,我现在看到 MEDIA_ROOT 用于上传文件。但是我如何设置静态路径,以便 django 能够从中提供服务?我只能找到符合该描述的 MEDIA_ROOT。
    【解决方案2】:

    当用户选择“皮肤”名称时,在您的设置文件中更改 MEDIA_ROOT。

    PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) #assuming your settings file is in your project root
    TEMPLATE_NAME = 'my_template'
    MEDIA_ROOT = os.path.join(PROJECT_ROOT, "media", TEMPLATE_NAME)
    
    print MEDIA_ROOT
    # /path/to/project/media/my_template/
    

    以后,如果这更改为可在 Admin 中更改的可配置设置变量,您可能会使用更改 MEDIA_ROOT 值的中间件获得相同的结果。

    【讨论】:

      猜你喜欢
      • 2019-06-07
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 2015-05-20
      • 2012-01-27
      • 2013-11-25
      • 1970-01-01
      相关资源
      最近更新 更多