中间一大波重复的,有办法精简吗?
def index(request):
return HttpResponse("hello world")
#软件页面
def software(request):
soft=SoftWare.objects.all()
content = {'soft':soft}
return render(request,'soft_index.html',content)
#软件内容页面
def software_detail(request,software_id):
soft= SoftWare.objects.get(id=str(software_id))
content = {'soft':soft}
return render(request,'soft_detail.html',content)
#博客首页
def blog(request):
post = Article.objects.all()
content ={'post':post}
return render(request,'blog_index.html',content)
#博客内容页面
def blog_detail(request,blog_id):
post= Article.objects.get(id=str(blog_id))
content = {'post':post}
return render(request,'blog_detail.html',content)
#脚本首页
def bash(request):
bash = Bash.objects.all()
content ={'bash':bash}
return render(request,'bash_index.html',content)
#脚本内容页面
def bash_detail(request,blog_id):
bash= Article.objects.get(id=str(blog_id))
content = {'bash':bash}
return render(request,'bash_detail.html',content)
#视频首页
def video(request):
post = Video.objects.all()
content ={'video':video}
return render(request,'video_index.html',content)
#视频内容页面
def video_detail(request,blog_id):
post= Video.objects.get(id=str(blog_id))
content = {'video':video}
return render(request,'video_detail.html',content)
1
sfwn 2016-11-19 11:56:20 +08:00 1
software_id 和 blog_id 可以设默认值,然后方法里判断下
|
4
Jblue 2016-11-19 12:40:29 +08:00
意思就是将 software_id 和 blog_id 可以区别开
|
5
Daniel65536 2016-11-19 13:40:20 +08:00 via iPad 3
def page_factory(pagename, obj, template):
---- return lambda request: render(request, template, { pagename: obj.all() } video = page_factory( 'video', Video.objects, 'video_index.html') bash = page_factory( 'bash', Bash.objects, 'bash_index.html') |
6
nooper 2016-11-19 14:04:01 +08:00 via iPad 1
你可以用 mixin
|
7
jimzhong 2016-11-19 14:19:53 +08:00
这样写 view 也没啥问题啊,只要性能不差,维护方便就好
|
8
menc 2016-11-19 14:21:54 +08:00 2
@Daniel65536 像这个,就是典型的不可维护的代码,只关注炫技,完全不关注业务的内在联系
|
9
wyntergreg 2016-11-19 14:42:53 +08:00
不需要精简
|
10
srlp 2016-11-19 14:46:00 +08:00
没什么好办法。
我个人想法是,你非要简化的话可以用类来包装一下,然后用 override 实现多态。 |
11
youyongsong 2016-11-19 14:53:50 +08:00
看上去这些 view 并没有什么真正的业务逻辑,都是 model 驱动的普通的 CRUD ,这样的情况直接用 Django 的 generic views 就行不需要自己写 view 内容。
|
12
zhuangzhuang1988 2016-11-19 15:21:22 +08:00
不需要的吧。。
|
13
7sDream 2016-11-19 15:24:07 +08:00
generic views + 1
|
14
reus 2016-11-19 15:24:34 +08:00
不需要精简,不然改动的时候你就知道烦了。
|
15
rim99 2016-11-20 14:01:46 +08:00 1
def fun(selector):
----'''selector 是 str 类型标识符 ----dict_func = {selector : func, ... ...} ----dict_page = {selector : page, ... ...} ----content = {selector : SoftWare.objects.dict[selector]() } ----return render(request, dict_page[selctor], content) 其他函数直接向 func 传递 selector 标识符就可以了 |
16
t0p10 2016-11-28 10:22:08 +08:00
写的挺好的,改了反而难以读懂
|