前言
博客的基本功能完成了,接下来,我们来看一下还有哪些知识点可以加入我们的系统。
超链接
template中可以使用:
{% url 'app_name: url_name' param %}
- app_name:应用命名空间的名称
- url_name:链接名
- param:参数
app_name和url_name都在urls.py中配置。
djsite/djsite/urls.py中
url(r'^blog/', include('blog.urls', namespace='blog')),
其中namespace='blog'
代表的是app_name。
djsite/blog/urls.py中
url(r'^(?P<article_id>[0-9]+)$', views.detail, name='detail'),
其中name='detail'
代表的是url_name。
比如,我们想要访问views.detail方法,那么在页面中,可以使用:
{% url 'blog:detail' article.id %}
实际上,这种写法并没有我们上一篇文章中的写法方便,因为ajax得到数据后无法使用这种写法,建议弃用。
django shell
django shell和python shell的不同,在于django shell里加入了项目的环境,这就方便了我们的调试。
比如,我们在django shell输入:
from blog.models import Article
Article.objects.all()
Article.objects.all().values()
即可打印出所有的文章。
Admin进阶
在之前的后台管理系统中,点击进入Articles,发现里面有很多Article Object,因为我们在blog/models.py中添加了__str__
方法,所以显示的名称是文章标题。
那么,怎样把标题、内容、发布时间都显示出来呢?答案是修改blog/admin.py:
from django.contrib import admin
from . import models
# Register your models here.
class ArticleAdmin(admin.ModelAdmin):
# 显示在admin控制台中的列名
list_display = ('title', 'content', 'pub_time')
# 时间过滤器
list_filter = ('pub_time',)
admin.site.register(models.Article, ArticleAdmin)
改用mysql
sqlite,做一些测试还可以,但是在实际开发中,我们通常使用mysql。
1、假设我们的数据库用户名为root,密码为空,数据库名为djsite。
2、安装pymysql
pip install pymysql
3、修改djsite/djsite/settings.py:
# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'NAME': 'djsite',
'USER': 'root',
'PASSWORD': '',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
4、修改djsite/djsite/__init__.py
:
import pymysql
pymysql.install_as_MySQLdb()
5、数据迁移
python manage.py makemigrations
python manage.py migrate
6、创建超级用户
python manage.py createsuperuser
源码分享
https://github.com/voidking/djsite/releases/tag/v0.3.0