Python 老司机带我开开车 - V2EX
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kangsgo

Python 老司机带我开开车

  •  
  •   kangsgo Nov 19, 2016 4551 views
    This topic created in 3460 days ago, the information mentioned may be changed or developed.

    中间一大波重复的,有办法精简吗?

    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) 
    16 replies    2016-11-28 10:22:08 +08:00
    sfwn
        1
    sfwn  
       Nov 19, 2016   1
    software_id 和 blog_id 可以设默认值,然后方法里判断下
    kangsgo
        2
    kangsgo  
    OP
       Nov 19, 2016
    @sfwn 非常感谢!
    kangsgo
        3
    kangsgo  
    OP
       Nov 19, 2016
    @sfwn 开始以为搞懂了,发现又没懂了,能详细指导一下吗?
    Jblue
        4
    Jblue  
       Nov 19, 2016
    意思就是将 software_id 和 blog_id 可以区别开
    Daniel65536
        5
    Daniel65536  
       Nov 19, 2016 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')
    nooper
        6
    nooper  
       Nov 19, 2016 via iPad   1
    你可以用 mixin
    jimzhong
        7
    jimzhong  
       Nov 19, 2016
    这样写 view 也没啥问题啊,只要性能不差,维护方便就好
    menc
        8
    menc  
       Nov 19, 2016   2
    @Daniel65536 像这个,就是典型的不可维护的代码,只关注炫技,完全不关注业务的内在联系
    wyntergreg
        9
    wyntergreg  
       Nov 19, 2016
    不需要精简
    srlp
        10
    srlp  
       Nov 19, 2016
    没什么好办法。

    我个人想法是,你非要简化的话可以用类来包装一下,然后用 override 实现多态。
    youyongsong
        11
    youyongsong  
       Nov 19, 2016
    看上去这些 view 并没有什么真正的业务逻辑,都是 model 驱动的普通的 CRUD ,这样的情况直接用 Django 的 generic views 就行不需要自己写 view 内容。
    zhuangzhuang1988
        12
    zhuangzhuang1988  
       Nov 19, 2016
    不需要的吧。。
    7sDream
        13
    7sDream  
       Nov 19, 2016
    generic views + 1
    reus
        14
    reus  
       Nov 19, 2016
    不需要精简,不然改动的时候你就知道烦了。
    rim99
        15
    rim99  
       Nov 20, 2016   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 标识符就可以了
    t0p10
        16
    t0p10  
       Nov 28, 2016
    写的挺好的,改了反而难以读懂
    About     Help     Advertise     Blog     API     FAQ     Solana     6141 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 56ms UTC 02:13 PVG 10:13 LAX 19:13 JFK 22:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86