最近再次用django写了一个个人博客系统,一个**CMS**(content management system)。把其中的一些点给记下来,备忘。
**1**:静态和媒体文件配置:在settings.py中加入
#静态文件地址映射
STATIC_URL = 'static_files_dir'
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'static_files_dir').replace('\\', '/'),
)
#媒体文件
MEDIA_URL = 'media_files_dir'
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media_files_file').replace('\\', '/')
这样这些文件才能正确加载。
**2**:在models里犯了个让人很郁闷的错误,主要是好长一段时间不知道怎么回事
def __unicode__(self):
return self.id
这个id一定要把他变成str类型的。说起来都是泪啊。在**admin**后台查看相应**model**就会报错。
**3**:为了在**admin**中显示的时间好看一点。去网上找了一个有趣的东西,在相应的**admin.py**中:
class CatagoryAdmin(admin.ModelAdmin):
def time_format(self, Catagory):
return Catagory.create_time.strftime("%y/%m/%d")
time_format.admin_order_field = 'create_time'
time_format.short_description = '创建时间'
list_display = ('name', 'time_format')
**3**:在上传图片时,request.FILES没有数据。查文档发现
*Note that request.FILES will only contain data if the request method was POST and the <form> that posted the request has the attribute enctype="multipart/form-data". Otherwise, request.FILES will be empty.*
需要在**form**中添加属性**enctype="multipart/form-data"**。
**4**:get一个小技巧:
当需要在多个页面传入一些相同的数据时,最简单粗暴的方法就是在每个**views**加入这些东西。但是既然用**Python**了,那么肯定的用一种*elegant*一点的方法。那就是添加一个*utils.py*,重写一个render.
eg:
def cus_render(request, template, result={}):
if request.user.is_authenticated():
user = request.user
else:
#display bloghost's info if not login
user = UserProfile.objects.get(id=2)
setattr(user, "is_authenticated", False)
result['user'] = user
result['side_catagorys'] = get_catagory()
result['side_tags'] = get_all_tags()
result['recent_post'] = get_recent_post()
return render(request, template, result)
把都需要的参数加入,然后调用这个*render*就OK。
额,暂时就记这么多了。