zoukankan      html  css  js  c++  java
  • Django_jinja2

    Django 使用Jinja2模板

    网上有很多教程,但我照着做还是遇到了很多坑,版本问题伤不起。

    我的环境: ubuntu 16.4+python3.6+django(2.1) + jinja2(2.10.1)

    先上别人的博客,然后我在补充下我到的坑。
    传送门

    1. 静态文件:

    # settings.py
    STATIC_URL = '/static/'
     
    # 当运行 python manage.py collectstatic 的时候
    # STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来
    # 把这些文件放到一起是为了用apache等部署的时候更方便
    STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')
     
    # 其它 存放静态文件的文件夹,可以用来存放项目中公用的静态文件,里面不能包含 STATIC_ROOT
    # 如果不想用 STATICFILES_DIRS 可以不用,都放在 app 里的 static 中也可以
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, "common_static"),
        '/path/to/others/static/',  # 用不到的时候可以不写这一行
    )
     
    # 下面这个是默认设置,Django 默认会在 STATICFILES_DIRS中的文件夹 和 各app下的static文件夹中找文件
    # 注意有先后顺序,找到了就不再继续找了
    
    # STATICFILES_FINDERS = (
    #     "django.contrib.staticfiles.finders.FileSystemFinder",
    #     "django.contrib.staticfiles.finders.AppDirectoriesFinder"
    # )
    
    

    静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中。

    为什么不直接放在static文件夹下?文件命名空间

    eg:把 jquery.js 这种各个app通用的文件放在 common_static/js/ 下,这样就可以 在 /static/js/jquery.js 中访问到它!

    部署时 需要收集静态文件

    python manage.py collectstatic
    

    这一句话就会把以前放在app下static中的静态文件全部拷贝到 settings.py 中设置的 STATIC_ROOT 文件夹中

    当 DEBUG = True 时,Django 就能自动找到放在里面的静态文件。(Django 通过 STATICFILES_FINDERS 中的“查找器”,找到符合的就停下来,寻找的过程 类似于 Python 中使用 import xxx 时,找 xxx 这个包的过程)。

    比较容易混淆的几个点 STATIC_URL

    1. STATIC_URL = '/static/' 不是路径 url的意思。它是映射的意思。静态文件的绝对路径(STATICFILES_DIRS里的路径或者App目录下static路径或STATIC_ROOT的路径),比如 "/home/xxx/code/mysite/static/app/css/style.css",直接映射为:“/static/app/css/style.css”。url访问静态文件:http://127.0.0.1:8000/static/app/css/style.css. {% static 'appname/css/style.css' %}, {% static %} 模板标签会生成静态文件的绝对路径。
      url("images/background.gif") 的写法同理。

    2. STATIC_ROOT 不是根目录,是部署时收集起来的目录。

    3. STATICFILES_DIRS 是通用目录和其他目录(地址随便在你计算机上哪里),按照STATICFILES_FINDERS的默认查找顺序,他的优先级还高于App目录下的static目录。

    jinja2 中static url

    django模板写法

    {% load static %}
    <link rel="stylesheet" href="{% static 'style.css' %}">
    

    jinja2写法

    {{ static('css/index.css') }}
    {{ url('detail', args=(question.id, ) }}
    

    注意不再需要 load static,注意两层引号

    <link rel ="stylesheet" href="{{ static('appname/stytle.css') }}" >
    

    几个老版本的写法:

    1. 在settings.py中的TEMPLATES/OPTIONS添加'builtins':['django.templatetags.static'],这样以后在模版中就可以直接使用static标签,而不用手动的load了。报错:没有builtins

    2. {%load staticfiles%}与{%load static%}之间有什么区别?前面老版本,后面新版本。

  • 相关阅读:
    jquery.tmpl.js 模板引擎用法
    var 的使用
    BUG集锦
    jquery Ajax异步请求之session
    找到多个与名为“Login”的控制器匹配的类型
    蒙板 模态对话框
    mvc通过ActionFilterAttribute做登录检查
    MVC 分页
    MVC 创建线程内的db单例
    Servlet生命周期中的service方法分析
  • 原文地址:https://www.cnblogs.com/ShawSpring/p/10891909.html
Copyright © 2011-2022 走看看