Django:存储全局静态文件和模板的位置?

时间:2016-03-06 09:17:27

标签: python django

所以我正在开发一个Django(1.9)项目,并且需要在多个应用程序中使用相同的模板和静态文件。我知道如何使用存储在每个应用程序外部的模板和静态文件(在settings.py中使用STATICFILES_DIRS和TEMPLATEFILES_DIRS),但是应该将存储在哪里?

我的猜测是在项目目录中的文件夹中。

     Dim txtTemp As string = ""
     Try
         Dim htmlDocument as HtmlDocument = New HtmlDocument()
         htmlDocument.LoadHtml(txtPosted)             
         for each imgNode as HtmlNode In htmlDocument.DocumentNode.Descendants("img")
    'Get value of width/height attribute
             Dim txtTempWidth as string = IIf(imgNode.Attributes.Contains("width"), imgNode.Attributes("width").Value, "").ToString()
             Dim txtTempHeight as string = IIf(imgNode.Attributes.Contains("height"), imgNode.Attributes("height").Value, "").ToString()                 
             if not string.IsNullOrEmpty(txtTempWidth)  then
         'remove all "width" attributes
                 While imgNode.Attributes.Contains("width")
                     imgNode.Attributes.Remove("width")
                 End While
         'add one "width" attribute
                 imgNode.Attributes.Add("width", txtTempWidth)
             End If
             if not string.IsNullOrEmpty(txtTempHeight)  then
         'remove all "height" attributes
                 While imgNode.Attributes.Contains("height")
                     imgNode.Attributes.Remove("height")
                 End While  
         'add one "height" attribute
                 imgNode.Attributes.Add("height", txtTempHeight)
             End If     
         Next

     'close img tag
         if (HtmlNode.ElementsFlags.ContainsKey("img")) then
            HtmlNode.ElementsFlags("img") = HtmlElementFlag.Closed
         else
            HtmlNode.ElementsFlags.Add("img", HtmlElementFlag.Closed)
         end if

        using writer as StringWriter = new StringWriter()
            htmlDocument.Save(writer)
            txtTemp = writer.ToString()
        End Using
     Catch ex As Exception
        Exceptions.LogException(ex)
        txtTemp = ""
     End Try


    'final result
    Dim txtFinal as string = IIf(string.IsNullOrEmpty(txtTemp), txtPosted, txtTemp) .ToString()

但如果有正式的重新考虑(我在文档中找不到),我宁愿遵守这些。

另外,如果在正常的django app目录之外有任何其他建议使用模板和静态文件,你认为我应该知道,我真的很感激你告诉我(或告诉我在哪里看)。

干杯:)

3 个答案:

答案 0 :(得分:14)

假设此处有一个全局css文件: home/user/myproject/staticfiles/css/global.css

更改 settings.py 以匹配此内容:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "staticfiles"), 
]

在模板内部,例如 index.html

{% load static %}

<link rel="stylesheet" type="text/css" href="{% static 'css/global.css' %}" />   

现在Django可以找到 global.css

答案 1 :(得分:1)

settings.py 文件中添加以下内容

STATIC_URL = '/static/' # this will be added before your file name
STATIC_ROOT = 'path/to/your/files/' # this will help django to locate the files

在此处详细了解:https://docs.djangoproject.com/en/1.9/howto/static-files/

答案 2 :(得分:1)

虽然 nu everest 的答案是正确且有效的(在您重新启动服务器后),但在我的情况下,它缺乏我的 IDE 自动建议静态文件路径的优势。所以我去在我的项目中指定一个相对路径。为简单起见,我将目录命名为“静态”(与 STATIC_URL 变量相同),但当然任何名称都是可能的。

settings.py:

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    "myproject" + STATIC_URL
]

这里重要的是:根实际上不是 settings.py 的父级,而是其父级的父级,如:

BASE_DIR = Path(__file__).resolve().parent.parent