在 Django Admin 后台发布文章

在此之前我们完成了 Django 博客首页视图的编写,我们希望首页展示发布的博客文章列表,但是它却抱怨:暂时还没有发布的文章!如它所言,我们确实还没有发布任何文章,本节我们将使用 Django 自带的 Admin 后台来发布我们的博客文章。

创建 Admin 后台管理员账户

要想进入Django Admin 后台,首先需要创建一个超级管理员账户。我们在 让 Django 完成翻译:迁移数据库 中已经创建了一个后台账户,但如果你没有按照前面的步骤创建账户的话,可以运行 python manage.py createsuperuser 命令新建一个:

python manage.py createsuperuser

Username (leave blank to use 'zmrenwu@163.com'):  admin
Email address:  admin@example.com
Warning: Password input may be echoed.
Password:  ******
Warning: Password input may be echoed.
Password (again):  ******
Superuser created successfully.

注意:在命令行输入密码时可能不会显示输入的字符,不要以为键盘坏了,照正常的方式输入密码即可。

在 Admin 后台注册模型

要在后台注册我们自己创建的几个模型,这样 Django Admin 才能知道它们的存在,注册非常简单,只需要在 blog\admin.py 中加入下面的代码:

blog/admin.py

from django.contrib import admin
from .models import Post, Category, Tag

admin.site.register(Post)
admin.site.register(Category)
admin.site.register(Tag)

激活虚拟环境,运行开发服务器,访问 http://127.0.0.1:8000/admin/ ,就进入了到了Django Admin 后台登录页面,输入刚才创建的管理员账户密码就可以登录到后台了。

Django Admin 后台

可以看到我们刚才注册的三个模型了,点击 Posts 后面的增加按钮,将进入添加 Post 的页面,也就是新增博客文章。然后在相关的地方输入一些测试用的内容,增加完后点击保存,这样文章就添加完毕了,你也可以多添加几篇看看效果。注意每篇文章必须有一个分类,在添加文章时你可以选择已有分类。如果数据库中还没有分类,在选择分类时点击 Category 后面的 + 按钮新增一个分类即可。

Django Admin 后台新增文章

你可能想往文章内容中添加图片,但目前来说还做不到。在支持 Markdown 语法部分中将介绍如何在文章中插入图片的方法。

访问 http://127.0.0.1:8000/ 首页,你就可以看到你添加的文章列表了,下面是我所在环境的效果图:

博客首页显示的文章列表

定制 Admin 后台

在 admin post 列表页面,我们只看到了文章的标题,但是我们希望它显示更加详细的信息,这需要我们来定制 Admin 了,在 admin.py 添加如下代码:

blog/admin.py

from django.contrib import admin
from .models import Post, Category, Tag

class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'created_time', 'modified_time', 'category', 'author']

# 把新增的 PostAdmin 也注册进来
admin.site.register(Post, PostAdmin)
admin.site.register(Category)
admin.site.register(Tag)

由于如何定制 Admin 后台不是本教程的重点,这里只是为了简单地到达期望效果,因此不再对上述代码做过多解释。

刷新 Admin Post 列表页面,可以看到显示的效果好多了。

定制后的 Admin 文章列表页

总结

本章节的代码位于:Step7: publish posts using django admin

如果遇到问题,请通过下面的方式寻求帮助。

  • 在下方评论区留言。
  • 将问题的详细描述通过邮件发送到 djangostudyteam@163.com,一般会在 24 小时内回复。
  • Pythonzhcn 社区的新手问答版块 发布帖子。

-- EOF --


115 条评论 / 50 人参与
liutongyang

【python2】

由于python2的默认编码不是UTF-8

所以需要在models中加入以下4行代码 否则不能输入中文 会引发UnicodeEncodeError 

import sys 

from imp import reload 

reload(sys) 

sys.setdefaultencoding('utf-8')


zgGitHub

 Tags:   

Tag object (1)    

Tag object (2)    

Tag object (3)    

Tag object (4)    

Tag object (5)   


发布文章的时候,选择tags,这里面显示的都是这样的。。。,这个该怎么处理呀


風与飄颻

大神, 我的主页一直显示没有文章, 但是我是确定有发布文章的。而且显示没有找到那个CSS 的文件。麻烦请教一下,我要怎么去检查。我对了一遍的,没有发现哪里有出入的。感谢。 

Image

風与飄颻 風与飄颻

晕 我不能发布问题  一发布就是空白页面


風与飄颻 風与飄颻

[van@oc6344180105 blogproject]$ python manage.py runserver Performing system checks... System check identified no issues (0 silenced).July 12, 2018 - 20:50:33 Django version 1.11.14, using settings 'blogproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.[12/Jul/2018 20:50:44] "GET / HTTP/1.1" 200 8444 Not Found: /css/bootstrap.min.css [12/Jul/2018 20:50:44] "GET /css/bootstrap.min.css HTTP/1.1" 404 2160[12/Jul/2018 20:50:44] "GET /static/blog/css/bootstrap.min.css HTTP/1.1" 304 0 [12/Jul/2018 20:50:44] "GET /static/blog/css/pace.css HTTP/1.1" 304 0 [12/Jul/2018 20:50:44] "GET /static/blog/css/custom.css HTTP/1.1" 304 0 [12/Jul/2018 20:50:44] "GET /static/blog/js/jquery-2.1.3.min.js HTTP/1.1" 304 0[12/Jul/2018 20:50:44] "GET /static/blog/js/bootstrap.min.js HTTP/1.1" 304 0 [12/Jul/2018 20:50:44] "GET /static/blog/js/pace.min.js HTTP/1.1" 304 0[12/Jul/2018 20:50:44] "GET /static/blog/js/modernizr.custom.js HTTP/1.1" 304 0 [12/Jul/2018 20:50:44] "GET /static/blog/js/script.js HTTP/1.1" 304 0 Not Found: /favicon.ico [12/Jul/2018 20:50:58] "GET /favicon.ico HTTP/1.1" 404 2130 Not Found: /favicon.ico [12/Jul/2018 20:50:58] "GET /favicon.ico HTTP/1.1" 404 2130


風与飄颻 風与飄颻
[van@oc6344180105 blogproject]$ python manage.py runserver 
Performing system checks...
System check identified no issues (0 silenced).July 12, 2018 - 20:50:33
Django version 1.11.14, using settings 'blogproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
[12/Jul/2018 20:50:44] "GET / HTTP/1.1" 200 8444 Not Found: /css/bootstrap.min.css
[12/Jul/2018 20:50:44] "GET /css/bootstrap.min.css HTTP/1.1" 404 2160
[12/Jul/2018 20:50:44] "GET /static/blog/css/bootstrap.min.css HTTP/1.1" 304 0
[12/Jul/2018 20:50:44] "GET /static/blog/css/pace.css HTTP/1.1" 304 0
[12/Jul/2018 20:50:44] "GET /static/blog/css/custom.css HTTP/1.1" 304 0
[12/Jul/2018 20:50:44] "GET /static/blog/js/jquery-2.1.3.min.js HTTP/1.1" 304 0
[12/Jul/2018 20:50:44] "GET /static/blog/js/bootstrap.min.js HTTP/1.1" 304 0
[12/Jul/2018 20:50:44] "GET /static/blog/js/pace.min.js HTTP/1.1" 304 0
[12/Jul/2018 20:50:44] "GET /static/blog/js/modernizr.custom.js HTTP/1.1" 304 0
[12/Jul/2018 20:50:44] "GET /static/blog/js/script.js HTTP/1.1" 304 0 Not Found: /favicon.ico
[12/Jul/2018 20:50:58] "GET /favicon.ico HTTP/1.1" 404 2130 Not Found: /favicon.ico
[12/Jul/2018 20:50:58] "GET /favicon.ico HTTP/1.1" 404 2130

風与飄颻 風与飄颻
2
(blogproject_env) [van@oc6344180105 css]$ pwd
/home/van/blogproject_env/blogproject/blog/static/blog/css
(blogproject_env) [van@oc6344180105 css]$ ll
total 140
-rw-r--r--. 1 van van 117150 Jul 11 08:42 bootstrap.min.css
-rw-r--r--. 1 van van  14568 Jul 11 08:42 custom.css
drwx------. 2 van van   4096 Jul 11 08:42 highlights
-rw-r--r--. 1 van van    177 Jul 11 08:42 pace.css

3
(blogproject_env) [van@oc6344180105 blog]$ pwd
/home/van/blogproject_env/blogproject/template/blog
(blogproject_env) [van@oc6344180105 blog]$ ll
total 28
-rw-r--r--. 1 van van  9925 Jul 11 09:53 index.html
-rw-rw-r--. 1 van van 14541 Jul 11 08:50 index_kp.html
(blogproject_env) [van@oc6344180105 blog]$ vi index.html

風与飄颻 風与飄颻

4{% load staticfiles %} <!DOCTYPE html><html><head>     <title> The first Blog in 2018 </title>     <!-- meta -->    <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1">     <!-- css -->    <link rel="stylesheet" href="css/bootstrap.min.css">     <link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">    <link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}">     <link rel="stylesheet" href="{% static 'blog/css/pace.css' %}">     <link rel="stylesheet" href="{% static 'blog/css/custom.css' %}">     <!-- js -->     <script src="{% static 'blog/js/jquery-2.1.3.min.js' %}"></script>    <script src="{% static 'blog/js/bootstrap.min.js' %}"></script>     <script src="{% static 'blog/js/pace.min.js' %}"></script>     <script src="{% static 'blog/js/modernizr.custom.js' %}">


風与飄颻 風与飄颻
4
{% load staticfiles %} <!DOCTYPE html><html><head>    
<title> The first Blog in 2018 </title>     <!-- meta -->   
<meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1">    
<!-- css -->   
<link rel="stylesheet" href="css/bootstrap.min.css">    
<link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">   
<link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}">    
<link rel="stylesheet" href="{% static 'blog/css/pace.css' %}">    
<link rel="stylesheet" href="{% static 'blog/css/custom.css' %}">    
<!-- js -->    
<script src="{% static 'blog/js/jquery-2.1.3.min.js' %}"></script>   
<script src="{% static 'blog/js/bootstrap.min.js' %}"></script>    
<script src="{% static 'blog/js/pace.min.js' %}"></script>    
<script src="{% static 'blog/js/modernizr.custom.js' %}">

風与飄颻 風与飄颻

抱歉 不知道为什么发不了, 发的好乱


追梦人物 [博主] 風与飄颻

可能是你视图中的模板变量和模板中的变量名不统一,仔细对比一下。


風与飄颻 追梦人物 [博主]


感谢大神!


lianxi

1231 


Wynnfan

博主你好,我在admin后台写的文章分类和标签都是汉字,保存了以后,显示category object ,tag object,是怎么回事


sheaye Wynnfan

在Category类和Tag类中定义__str__方法,返回name,例如:

class Category(models.Model): 

name = models.CharField(max_length=100)

def __str__(self): return self.name


安天崖

你好博主,新人有个问题帮忙解答下,前面没有错误,但在后台注册模型那里,我在admin.py里加入了如上代码,但正常进入admin页面后看不到那些模型,这个怎么解释0.0


安天崖 安天崖

并且本来显示的用户和组里,点击添加,一直在加载中,并不能添加


azunia

博主能不能补下前台发布文章的教程呢?

MODELS:

class Post(models.Model): 

 title = models.CharField(max_length=70, verbose_name='题目') 

 body = models.TextField(verbose_name='正文') 

 created_time = models.DateTimeField(auto_now_add=True) 

 modified_time = models.DateTimeField(auto_now_add=True) 

 excerpt = models.CharField(max_length=200, blank=True) 

 category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='分类') 

 tags = models.ManyToManyField(Tag, blank=True, verbose_name='标签') 

 author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 

 views = models.PositiveIntegerField(default=0)

...

VIEWS:

def ask(request): 

 if request.method == 'POST': 

 form = AskForm(request.POST, instance=request.user)

 if form.is_valid(): 

 form.save() 

 return redirect('/in')

...

FORMS:

class AskForm(forms.ModelForm): 

 class Meta: model = Post 

 fields = ['title', 'category', 'tags', 'body']


我写的前台view,获取当前登陆用户,然后保存文章到数据库

但是现在提交不报错,也跳转了,但是就是存不到数据库里。。


追梦人物 [博主] azunia

可以在调试环境下看看 form.save() 是否的确执行了。


azunia 追梦人物 [博主]

我测试改了一下:

VIEWS:

if request.method == 'POST': 

 form = AskForm(request.POST)

 if form.is_valid():

 form.save() 

 return redirect('/in')

去掉了request.user

然后

FORMS:

class AskForm(forms.ModelForm): 

 class Meta: model = Post 

 fields = ['title', 'author', 'category', 'tags', 'body']

加上了author

页面渲染出了所有用户的下拉列表。。但是这样提交之后,就能插入数据库了。。

我怎么能只能选当前用户,或者不显示,默认就是当前用户呢。。

愁人。。。。


追梦人物 [博主] azunia

哦,如果你用 model form,需要复写表单的 save 方法,手动将 user 保存,需要一定的技巧,最好是读一读表单的源码。


xiaopanddxiong

初学者的福利


JonhoyChan

博主你好,我觉得在设计数据库的时候,创建时间和修改时间可以用DateTimeField里的参数,比如:

created_time = models.DateTimeField(auto_now_add=True)

modified_time = models.DateTimeField(auto_now=True)

这样效果是不是会更好呢


追梦人物 [博主] JonhoyChan

注意这两个字段已经 deprecated,用 default 参数指定一个函数更好。



JJSang 量飞

不会用这个库 没有查到方法 方便教我一下吗


Arno Fan

python2.x   post提交报这个错误,有同学遇到吗?  tag, category没有问题。

IntegrityError at /admin/blog/post/add/
(1452, 'Cannot add or update a child row: a foreign key constraint fails (`mysite`.`django_admin_log`, CONSTRAINT `django_admin_log_content_type_id_c4bce8eb_fk_django_co` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`))')

Arno Fan Arno Fan

感觉自己踩到一个坑。 

./manage.py sqlmigrate admin 0001
BEGIN;
--
-- Create model LogEntry
--
CREATE TABLE `django_admin_log` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `action_time` datetime(6) NOT NULL, `object_id` longtext NULL, `object_repr` varchar(200) NOT NULL, `action_flag` smallint UNSIGNED NOT NULL, `change_message` longtext NOT NULL, `content_type_id` integer NULL, `user_id` integer NOT NULL);
ALTER TABLE `django_admin_log` ADD CONSTRAINT `django_admin_log_content_type_id_c4bce8eb_fk_django_co` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`);
ALTER TABLE `django_admin_log` ADD CONSTRAINT `django_admin_log_user_id_c564eba6_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`);
COMMIT;


Arno Fan Arno Fan

注:直接起了一个 python 3.6.4 的虚拟环境,提交没有问题。


wgPython

博主,问一下,比如我先建立好了Models模型类,同时也迁移插入好了数据,然后我想加几个字段,比如点击量,阅读量,评论数,还有是否删除等等这些,一直没有找到合适的方法,我就直接修改的数据库,sql语句手动添加的字段,请问django怎么新添加字段。



追梦人物 [博主] wgPython

在定义的 Model 类添加属性,然后运行那两条数据库迁移命令就可以了。


叶小凯凯


Tove_cv
# 本人新手一枚,如有错误请见谅。
# 今天我照着教程操作了一遍,结果在后台  ( http://127.0.0.1:8000/admin/ ) 添加了文章后,
# 然后回到主页面 (127.0.0.1:8000) ,发现主页面没有显示 Post 的 body (博客正文),
# 然后就发现在上一节的 index.html 里的代码里发现少了一行显示 body (博客正文)的代码:
# <p>{{ post.body }}</p>
# 我把它添加在 
/templates/blog/index.html
<!-- 我觉得是少了一句: <p>{{ post.body }}</p> -->
<div class="entry-content clearfix">
<p>{{ post.body }}</p>
  <p>{{ post.excerpt }}</p>
  <div class="read-more cl-effect-14">
    <a href="#" class="more-link">继续阅读 <span class="meta-nav">→</span></a>
  </div>
</div>


Kenmin_Young Tove_cv

主页上显示的是标题、分类、时间、摘要等一些文章基本信息,不显示body的内容,body要‘继续阅读’后才能看到


阿潘尼

找到原因了,在上个章节第一步修改blog/views.py,这一步忘记做了,修改后就正常了


阿潘尼

按步骤输入了几个测试数据进post,刷新index时总显示“暂时还没有发布的文章!”,不知道哪个步骤错了?


mamami

找到原因了,PostAdmin没有注册


mamami

我都设置了,但是没有显示,不知道错哪了


heidanchaofanhei

博主,突然想起一个问题,就是我admin后台看到的Create time和Modified time 这两个字段的显示从哪来的?我记得编写models.py创建的字段是created_time和modified_time,那么后台显示是django默认显示的还是我哪一步操作得来的呢?谢谢啦


追梦人物 [博主] heidanchaofanhei

你在 admin 中定义了你要显示的字段:

class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'created_time', 'modified_time', 'category', 'author']

heidanchaofanhei 追梦人物 [博主]

list_display = ['title', 'created_time', 'modified_time', 'category', 'author'],这里面的字段是django系统默认就有的么?我好奇的是admin后台显示出来的跟我定义的字段名字大小写样式都不一样。


追梦人物 [博主] heidanchaofanhei

django 对字段名做了一些美化处理,具体可以查看 admin 的文档或者看 admin 的代码就知道了。


LINDAZS
你说的media_root, 可以设置好路径保存图片, 之前做过一次展示图片, 在类里添加一个image的字段, 设置好上传的路径, 在设置项目的根目录下的urls, 把静态url添加上, 不然是找不到的,
settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\','/')
urls.py
from django.conf.urls.static import static
from django.conf import settings

最后加上, 就可以正常的拉起图片了.
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

添翼leo老师
OperationalError at /practice/
no such table: blog_category
Request Method: GET
Request URL: http://127.0.0.1:8000/practice/
Django Version: 1.10.6
Exception Type: OperationalError
Exception Value:
no such table: blog_category
Exception Location: C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 337
Python Executable: C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\python.exe
Python Version: 3.6.1
Python Path:
['E:\\passispn\\passispn\\passispn\\quiz',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\python36.zip',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\python_memcached-1.54-py3.6.egg',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\odf',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\odf',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\odf',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\odf',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\odf',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\odf',
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\odf']

makemigrations
以及
migrate
命令都执行了
为什么会出现这样的问题?谢谢

添翼leo老师 添翼leo老师
看网上的解决方案
删除 db.sqlite3之后
makemigrations 以及 migrate 就可以解决

但是我的db.sqlite3 里面有很多的数据 不能删除

所以 不知道怎么办了 谢谢

追梦人物 [博主] 添翼leo老师
no such table: blog_category

不知道你是否在哪一步出了错,让 django 误以为你已经生成了数据库表,但实际上没有。如果数据重要的话,最好不要乱动,以免使数据丢失。另外对于存在数据的项目,迁移数据库前**一定要备份!**

添翼leo老师 追梦人物 [博主]
谢谢博主

数据 我已经备份了

接下来 我应该怎么做呢?

我都不知道要从哪里着手解决这个问题,谢谢

追梦人物 [博主] 添翼leo老师
删掉全部 migrations 文件和数据库,重新做一遍

花重-城
博主,category 和tag 后台管理只显示category object ,和tag object123.。。需要怎么修改

追梦人物 [博主] 花重-城
见之前关于 __str__ 方法的教程里的内容

花重-城
OperationalError at /admin/blog/post/add/

no such table: blog_category

Request Method: GET
Request URL: http://127.0.0.1:8000/admin/blog/post/add/
Django Version: 1.11.4
Exception Type: OperationalError
Exception Value:

no such table: blog_category

Exception Location: C:\Users\xin\AppData\Roaming\Python\Python36\site-packages\django\db\backends\sqlite3\base.py in execute, line 328
Python Executable: C:\Program Files\Python36\python.exe
Python Version: 3.6.2
Python Path:

['F:\\Sublime Text 3\\Sublime Text 3\\手动案例\\总结\\djangotest',
'C:\\Program Files\\Python36\\python36.zip',
'C:\\Program Files\\Python36\\DLLs',
'C:\\Program Files\\Python36\\lib',
'C:\\Program Files\\Python36',
'C:\\Users\\xin\\AppData\\Roaming\\Python\\Python36\\site-packages',
'C:\\Program Files\\Python36\\lib\\site-packages']

Server time: 星期日, 27 八月 2017 14:37:07 +0000

没有跟着教程走虚拟环境,在
>>> from blog.models import Category, Tag, Post
>>> c = Category(name='category test')
>>> c.save()
>>> t = Tag(name='tag test')
>>> t.save()
c.save() 的时候就报错了,所以就直接创建的项目,别的地方都没问题,在这块点post后出现的错误,缺少表

花重-城 花重-城
解决了,数据库创建表后没有同步,报错缺少那个表

leonfrank
博主,我想问几个问题
1. 我发布的文章有保存到哪个文件吗?可以在哪个目录下找到
2. 文章里可以有插入图片操作吗,图片要上传到哪个目录
3. 我在网上看到的别的介绍里说可以配置media_root这一项来保存数据文件,这个怎么用
4. 网站可以有注册功能吗,怎么实现

追梦人物 [博主] leonfrank
1. 保存在数据库中,你可以在 xx.sqlite3 文件中找到
2. 教程中不支持,但可以采用 markdown 的方式替代实现
3. 比较复杂,可以自行研究文档:https://docs.djangoproject.com/en/1.10/topics/files/
4. 见我的另一个教程,Django 用户注册系统:http://zmrenwu.com/category/django-auth-example/

nice粉条
list_display = ['title', 'created_time', 'modified_time', 'category', 'author'] 博主,这种在后台的展示可以设置别名么 例如 展示的时候显示 “标题”,“创建时间” 有什么方法么 我看 list_display的方法为 返回字段 ‘__str__’

追梦人物 [博主] nice粉条
这个还真没有研究过,可以查查 admin 的文档。

Hogantry nice粉条
title = models.CharField(max_length=70, verbose_name='标题')
加个verbose_name属性就好了

米粥fly怕素色pool
你好,博主 这啥情况?
OperationalError at /admin/blog/post/add/
no such table: blog_post
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/blog/post/add/
Django Version: 1.11.3
Exception Type: OperationalError
Exception Value:
no such table: blog_post
Exception Location: /home/leodowhat/.pyenv/versions/test/lib/python3.6/site -packages/django/db/backends/sqlite3/base.py in execute, line 328

追梦人物 [博主] 米粥fly怕素色pool
运行 python manage.py makemigrations 和 migrate 么?具体见前边的几篇教程。

世事可否有转机
你好,请问博主,我post了,还是显示暂时未发布文章,检查了index.html,应该没问题呀。

世事可否有转机 世事可否有转机
已经解决,修改了views.py

某王府偷狗大盗 世事可否有转机

可以请问一下你是如何修改的吗?我也遇到了类似的问题


恠往逺方
楼主,还有个问题我用的是python2.7+Django1.11.3在后台管理中添加中文的时候报错,1.11.3是不能添加中文的吗?

追梦人物 [博主] 恠往逺方
可以的,这可能是 py2 的编码问题,按照错误提示修复一下编码应该就行了。

wangmeng 恠往逺方

在models中为Post,Tag,Category上面添加:@python_2_unicode_compatible即可。
我自己用的是python2.7+Django 1.8 亲测。


恠往逺方
楼主,为什么我的后台显示里面没有那三个注册的模块啊?

恠往逺方 恠往逺方
已经解决了,没有用admin.site.register()函数

杰木四水
希望有时间能详细写写定制后台的文章,感谢你的文章。

追梦人物 [博主] 杰木四水
这在官方文档的 tutorial 中有详细示例,我就不重复了。

小朩头人
请教下,输出显示的文章 与原输入不匹配;主要是回车/换行差异太大。是不是存的时候data写入表,显示时读data,造成的?

追梦人物 [博主] 小朩头人
html 会将任何回车,多个空格替换为 1 个空格。解决方案是使用 Markdown 或者手动加入 br 换行。

让你懂事让你乖
楼主,我在admin的post列表页,Category这一列下的值都为Category object而不是你图上所示的分类测试,请问是哪里出了问题

追梦人物 [博主] 让你懂事让你乖
添加 str 方法,具体见这篇教程 http://zmrenwu.com/post/6

abulimity
请教一下楼主哇
在后台添加Post的时候报错了 文章title是《第一篇文章》
"" needs to have a value for field "id" before this many-to-many relationship can be used.
是没有自动生成pk吗?

追梦人物 [博主] abulimity
需要相关代码才能确定问题,从描述来看可能是保存了多对多的数据。

abulimity
请问每个app对应一个admin还是一个admin可以管理所有app

追梦人物 [博主] abulimity
每个 app 下都有一个 admin 文件,admin 相关的代码需要放在这里面。

wlz
在添加完Post后,输入 http://127.0.0.1:8000/ 打开不是文章列表,还是显示
“欢迎访问我的博客首页” ,是不是还需要修改某个地方??

追梦人物 [博主] wlz
修改 index 模板。

wlz 追梦人物 [博主]

chen@hy
请教一下博主,其他都正常,就是create time和modified time不显示内容,主页上文章的创建时间也不显示,也并没有报错,这是为什么呢?

追梦人物 [博主] chen@hy
看下 model 代码

chen@hy 追梦人物 [博主]
models里面是:create_time=models.DateTimeField()
modified_time=models.DateTimeField()
index.html里是:

追梦人物 [博主] chen@hy
可能是你在后台没有设置值?不过这样后台应该不允许你保存文章的。

chen@hy 追梦人物 [博主]
models里面是:create_time=models.DateTimeField()
modified_time=models.DateTimeField()
index.html里是:

chen@hy chen@hy
多点了一下。。。

追梦人物 [博主] chen@hy
和 admin 设置无关,你在后台的文章表单没有设置时间选项么?

chen@hy 追梦人物 [博主]
是指在创建和修改post的时候么,有时间选项,填的时候也有内容,但回到post界面和主页时候时间就不显示了

追梦人物 [博主] chen@hy
那就不知道了,可能是数据库问题?Mysql?

无头骑士Derek chen@hy

一样的问题,请问你解决了吗


XFeng7
请问这个问题怎么解决呀?头皮发麻。。。。
Unhandled exception in thread started by .wrapper at 0x000001FC9F8881E0>
Traceback (most recent call last):
File "D:\new_start\blogproject_env\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "D:\new_start\blogproject_env\lib\site-packages\django\core\management\commands\runserver.py", line 121, in inner_run
self.check(display_num_errors=True)
File "D:\new_start\blogproject_env\lib\site-packages\django\core\management\base.py", line 420, in check
raise SystemCheckError(msg)
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:

ERRORS:
: (admin.E108) The value of 'list_display[3]' refers to 'category', which is not a callable, an attribute of 'PostAdmin', or an attribute or method on 'blog.Post'.

System check identified 1 issue (0 silenced).

XFeng7 XFeng7
解决了,谢谢博主的文章。:D

zy410692 XFeng7

怎么解决的??


rex.wang zy410692

你试试检查一下你的,list里的拼写


benq1211
post在管理界面添加后,显示没有name字段
AttributeError at /admin/blog/post/add/
'Post' object has no attribute 'name'
Request Method: POST
Request URL: http://192.168.1.217:8000/admin/blog/post/add/
Django Version: 1.10.5
Exception Type: AttributeError
Exception Value:
'Post' object has no attribute 'name'
Exception Location: /mnt/siteone/blog/models.py in __str__, line 35
Python Executable: /root/.pyenv/versions/magedu/bin/python
Python Version: 3.5.2
Python Path:
['/mnt/siteone',
'/root/.pyenv/versions/3.5.2/lib/python35.zip',
'/root/.pyenv/versions/3.5.2/lib/python3.5',
'/root/.pyenv/versions/3.5.2/lib/python3.5/plat-linux',
'/root/.pyenv/versions/3.5.2/lib/python3.5/lib-dynload',
'/root/.pyenv/versions/magedu/lib/python3.5/site-packages']
Server time: 星期三, 14 六月 2017 13:57:34 +0800

追梦人物 [博主] benq1211
去掉 str 方法中的 name

benq1211 追梦人物 [博主]
谢谢,我直接返回title了

huapc
请问访问http://127.0.0.1:8000/admin/ 会出现如下错误
A server error occurred. Please contact the administrator.是怎么回事?

追梦人物 [博主] huapc
关了代理软件等。

huapc 追梦人物 [博主]
谢谢!已解决,是时区写错了,不能正确识别

仗剑踏歌行_Hung
访问 http://127.0.0.1:8000/admin/ 会出现如下错误。。。。求解 谢谢T__T
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/
Using the URLconf defined in blogproject.urls, Django tried these URL patterns, in this order:
^$ [name='index']
The current URL, admin/, didn't match any of these.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

仗剑踏歌行_Hung 仗剑踏歌行_Hung
已解决。。。。我之前把 在blogproject/urls.py里的这行给注释掉了
#url(r'^admin/', admin.site.urls)。 改回来就好了。。。

liuchengfei
访问 http://127.0.0.1:8000/ 首页
环境:python3.4,django1.10
报错如下:

Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/index.html

Using the URLconf defined in blogproject.urls, Django tried these URL patterns, in this order:

^admin/
^$ [name='index']

The current URL, index.html, didn't match any of these.

夹缝中难以生存 liuchengfei
找到解决的方法了么?

liuchengfei 夹缝中难以生存
不要输入index.html

夹缝中难以生存 liuchengfei
好的谢谢。
我是urls.py里面一行代码注释了。

jyzdream liuchengfei
你好,我也遇到这个问题,请问不要输入index.html是什么意思?

追梦人物 [博主] jyzdream
就是不要去掉域名后 .html

仗剑踏歌行_Hung 追梦人物 [博主]
不好意思 我也是卡在这里, 还是没有看明白您的解释T__T

仗剑踏歌行_Hung 追梦人物 [博主]
已解决 谢谢

我是单永旭
博主,在美化 admin 后台的时候,注册了PostAdmin之后,刷新网页没效果可能是什么原因呢?python3.4,django1.10

追梦人物 [博主] 我是单永旭
重启一下开发服务器试试?需要看一下你的注册代码是否有误?

无头骑士Derek 我是单永旭

我也遇到这个问题了,请问你解决了吗


tianjigor
我是用py2.7的,直接写中文保存会报'ascii' codec can't encode characters in position 0-1: ordinal not in range(128),在admin.py加上
import sys
reload(sys)
sys.setdefaultencoding("utf8")
才OK,估计py3没这个问题出现

我是单永旭 tianjigor
python貌似在用中文的时候应该要在第一行写上#coding:utf-8