V2EX = way to explore
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
Angus
V2EX  ›  Python

请教用Django框架写博客:修改文章功能的实现方法

  •  
  •   Angus · 2012-03-07 12:20:58 +08:00 · 4196 次点击
    这是一个创建于 4450 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是一个编程初学者,正在学着用Django编写一个简单的博客程序。现在遇到了一个问题:

    如何不用Django自带的admin模块实现对已发布的文章进行修改?把文章的内容读到一个form里,然后重新编辑?
    6 条回复    1970-01-01 08:00:00 +08:00
    Angus
        1
    Angus  
    OP
       2012-03-09 15:06:46 +08:00
    求帮助。。
    itommy
        2
    itommy  
       2012-03-09 15:07:33 +08:00
    @shawiz sean总要不要出来解释解释
    zxwind
        3
    zxwind  
       2012-03-09 15:21:55 +08:00
    Angus
        4
    Angus  
    OP
       2012-03-09 17:12:14 +08:00
    @zxwind 谢谢
    @shawiz 额,我的表达能力果然有问题。我不想用django.contrib.admin功能,想自己写一个。
    看完@zxwind提供的文档,我发现原来我之前想的这么离谱。再google了一下,实现了这个功能。


    @login_required
    def edit(request, blog_id):
    blog = get_object_or_404(Blog, pk=int(blog_id))
    if request.method == 'POST':
    form = BlogForm(request.POST, instance=blog)
    if form.is_valid():
    blog=form.save()
    blog.save()
    return HttpResponseRedirect('/blog/')

    else:
    form = BlogForm()

    return render_to_response('blog/edit.html', {'form': BlogForm(instance=blog) })


    现在就是不太明白为什么最后一行需要instance=blog,我再查查资料,谢谢各位。
    shawiz
        5
    shawiz  
       2012-03-09 18:52:29 +08:00
    @Angus 呵呵抱歉,理解错误。其实刚发完贴就发现你有个”不“字,不过已经晚了。最后一行 instance=blog, 我想是要把 request.method == ’GET' 的时候把 blog instance 原来的数据 populate 到 form 里去,这样 form 一打开就带有未修改前的数据。
    shawiz
        6
    shawiz  
       2012-03-10 00:10:01 +08:00
    @itommy 躺枪!

    没完全明白你的意思,是不是就想用自带的 admin 来修改你的文章?admin 里面如果有你文章的 model, 会有提供 form 给你直接修改。如果你文章 model 不在 admin 里面,在你的 app folder 里面加一个 admin.py

    from django.contrib import admin
    from models import Post

    admin.site.register(Post)


    (假设你的文章 model 叫 Post)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5701 人在线   最高记录 6547   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:14 · PVG 16:14 · LAX 01:14 · JFK 04:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.