Django和CSS的一个简单例子

bha*_*ral 25 css django

我是Django的新手,我正在尝试建立一个非常简单的Django应用程序.

现在,我要读到Django在线书籍的第5章:http://www.djangobook.com/en/2.0/chapter05/

在我开始尝试数据库之前,我现在要做的就是将一些简单的CS和J添加到应用程序中.

所以问题是,我该怎么做?我只有一个应用程序,我只需要一个css文件夹中的main.css和一个js文件夹中的main.js.

我检查了https://docs.djangoproject.com/en/1.3/howto/static-files/#staticfiles-in-templates页面,但阅读和阅读后,似乎没有很多工作在例子方面.

如何导入stylesheets/css(是否有像CakePHP这样的帮手?),我在哪里放置CSS和JS文件,是否需要配置静态东西?

更新:链接:Django中的渲染CSS没有多大帮助.主要是因为它对我不起作用,但我也特别不喜欢"if debug"部分.当我搬到prod时会发生什么?为什么我的媒体文件夹对于prod和本地开发者的定义不同?它不应该是相对的,甚至不是同一个地方吗?

Bur*_*lid 26

如果您遵循django的指导方针,您可以大大简化您的生活.

在示例代码中,在应用程序目录中,创建一个名为static的文件夹.在此文件夹中,放置您的css文件.

例:

$ django-admin.py startproject myproject
$ cd myproject
myproject$ python manage.py startapp myapp
myproject$ mkdir myapp/static
myproject$ cd myapp/static
myproject/myapp/static$ nano style.css
Run Code Online (Sandbox Code Playgroud)

在您的模板中:

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

确保添加myappINSTALLED_APPS列表中settings.py.现在,当您使用内置开发服务器时,您的样式表将正确呈现.

Django static默认搜索已安装应用程序中的目录,并且对于当前版本的django,默认情况下启用静态文件.


my_app/static/my_app/myimage.jpg如果您的应用程序和项目具有相同的名称,Django示例的路径会有点混乱.

建议这样做,因为当您运行collectstatic以收集所有静态文件时,将覆盖具有相同名称的文件.如果您myimage.jpg在另一个应用程序中调用了一个文件,它将被覆盖.在静态目录中提供应用程序名称将阻止这种情况,因为确切的目录结构将在您的STATIC_ROOT目录中复制.

一个简单的例子来说明这一点.如果你有一个带有两个应用程序的django项目,如下所示:

.
??? assets
??? manage.py
??? myapp
?   ??? __init__.py
?   ??? models.py
?   ??? static
?   ?   ??? myapp
?   ?       ??? test.txt
?   ??? tests.py
?   ??? views.py
??? myproj
?   ??? __init__.py
?   ??? __init__.pyc
?   ??? settings.py
?   ??? settings.pyc
?   ??? urls.py
?   ??? wsgi.py
??? otherapp
    ??? __init__.py
    ??? models.py
    ??? static
    ?   ??? otherapp
    ?       ??? test.txt
    ??? tests.py
    ??? views.py
Run Code Online (Sandbox Code Playgroud)

assets是你的STATIC_ROOT.现在当你运行collectstatic:

.
??? assets
?   ??? myapp
?   ?   ??? test.txt
?   ??? otherapp
?       ??? test.txt
??? manage.py
??? myapp
?   ??? __init__.py
?   ??? __init__.pyc
?   ??? models.py
?   ??? static
?   ?   ??? myapp
?   ?       ??? test.txt
?   ??? tests.py
?   ??? views.py
??? myproj
?   ??? __init__.py
?   ??? __init__.pyc
?   ??? settings.py
?   ??? settings.pyc
?   ??? urls.py
?   ??? wsgi.py
??? otherapp
    ??? __init__.py
    ??? __init__.pyc
    ??? models.py
    ??? static
    ?   ??? otherapp
    ?       ??? test.txt
    ??? tests.py
    ??? views.py
Run Code Online (Sandbox Code Playgroud)

你看它也在创建目录.在您的模板中,您现在可以使用应用程序的"命名空间"来引用每个文件:{{ STATIC_URL }}/myapp/test.txt

  • 抱歉让死者复活,但是在这种情况下 STATIC_URL 的值是多少? (2认同)

Gab*_*ant 6

对于您指向工作的示例,您的静态文件需要位于Django内置staticfiles应用程序可访问的位置.

实现这一目标有几个步骤:

首先,在项目目录中(即manage.py文件旁边),您需要创建一个目录来保存静态文件.称之为"static_files".

接下来,您需要让Django知道查看该目录,方法是STATICFILES_DIRSsettings.py文件列表中指定它.

像这样的东西:

STATICFILES_DIRS = [
    '/full/path/to/your/project/static_files/',
]
Run Code Online (Sandbox Code Playgroud)

在该static_files目录中,您可以创建所需的任何结构,这样您cssjs目录就可以到达.

之后,您应该能够使用{{ STATIC_URL }}模板中的标记来访问静态文件的基本URL.

因此,比方说,例如,您创建project/static_files/css/base.css,您将在模板中使用它,如下所示:

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/css/base.css" />
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!

编辑

使用默认设置STATICFILES_FINDERS,Django应自动提供STATICFILES_DIRS中列出的目录中的任何文件 - 有关详细信息,请参阅文档.

如果这不起作用,请检查一些事项:

  • 您是否已将STATICFILES_FINDERS设置编辑为默认设置以外的其他设置?
  • django.contrib.staticfiles在你的名单INSTALLED_APPSsettings.py
  • 你在使用Django的内置服务器(python manage.py runserver)吗?
  • 你有DEBUG = True你的settings.py?如果没有,你要么需要将其设置为True或使用insecure选项(python manage.py runserver --insecure).进入生产阶段时,请查看collectstatic命令.


Chr*_*ris 5

建议的方法再次改变(至少从我认为的Django 1.5).

在模板的顶部放置:

{% load staticfiles %}
Run Code Online (Sandbox Code Playgroud)

然后,使用相同的目录结构(myapp/static/myapp/style.css):

<link rel="stylesheet" href="{% static 'myapp/style.css' %}" />
Run Code Online (Sandbox Code Playgroud)

资源