Django Tricks

2015-07-14

Django 新手需要注意的十个要点
新手建议,可以参考,第四点我还是没明白,看了别人的代码都是把各种业务逻辑写在 views.py,怎么写到另外的地方。

1. 硬编码

像导航栏上的各种项目,需要进行跳转,或者静态文件,媒体文件,需要从开发环境部署上线 的时候就很麻烦。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # 项目的根目录,其它的模板文件,静态文件,媒体文件都是根据 `BASE_DIR`

# Template dir
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, "templates/account/"),
os.path.join(BASE_DIR, "templates/garage/"),
os.path.join(BASE_DIR, "templates/review/"),
) # 每个 App 的模板文件都放在统一的 `templates` 下面的每个 App 文件夹下

STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
'/var/www/static/',
)

STATIC_URL 是用来在模板里面载入静态的媒体文件,图片,音频,视频,用法如下:

1
2
{% load staticfiles %}
<img src="{% static "my_app/myexample.jpg" %}" alt="My image"/>

这个地方还是把图片文件放在了项目下的 static 文件夹,每个 App 单独一个文件夹。

1
2
3
4
<!-- loading Bootstrap core CSS -->
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap.min.css">
<!-- loading customise CSS -->
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/base_customise.css">

CSS, JS 文件设置,注意 css 前没有 /,在 STATIC_URL 中已经有了斜杠。
第二个 STATICFILES_DIRS 我还没明白到底是干什么的,文档里面写的是设置不同的静态文件目录,不绑定给特定的 App 用(看了半天英文还是没有明白……不过这个是必须要设置的,不设置那就找不到 CSS 和 JS 文件了)。部署到线上的的话就要把 STATICFILES_DIRS 换成 STATIC_ROOT = "/home/chen/DjangoProjects/static",服务器上的文件夹。

2. URL

URL 设置 urls.py 放在每个 App 下面,除非 App 真的很小,功能很少那放在和 settings.py 一个文件夹下的 urls.py 也没问题,一旦 App 大了之后给每个 App 单独设置 URL,和 models.py views.py 一起在 App 文件夹下,这样能够重用 App 到不通的项目中,在项目的 urls.py 中设置:

1
url(r'^', include('garage.urls', namespace='garage')),

这里的 namespace 是给在模板中直接调用 URL 用的,避免硬编码

1
<a class="navbar-brand" href="{% url 'garage:index' %}">BookGarage</a>

硬编码的问题我最早也纠结了很久,还在上线到服务器的时候掉到坑里了,还好也爬上来了。

3. 其他

其他建议比如:不要将项目名称包含在一引用代码中,这样不利于重用(我也没见过有人会这么做)。
部署的时候不要忘记将 DEBUG 设置改成 False
调试能够借助一些第三方工具获取更多的信息,django-debug-toolbar,前段时间是 Django 的十周年,调查显示这个工具用的人非常多。
还能用 Jinja2 这个模板系统替换自带的模板系统,作者是 Flask 的作者,也是 Flask 的一部分。
13 年的文章里面很多的链接都没用了,我也不知道这个到底是什么情况。