Django:视图中的冲突行为

时间:2013-11-16 18:28:57

标签: python django wiki

我有一个wiki应用程序,它具有存储,保存和编辑功能。当我创建一个wiki页面时,它会被完美地存储起来,并且view_page视图在从数据库中获取数据并在浏览器中显示它时没有任何问题。 但是当我单击编辑按钮并且它进入edit_page视图时出现问题,该视图不是获取数据。它获取标题,但它不提取内容并引发Article.DoesNotExist异常。

以下是两种观点:

def view_page(request):
    if "title" in request.GET and request.GET["title"]:
        article_name = request.GET["title"]
        try:
            article = Article.objects.get(title=article_name)
        except Article.DoesNotExist:
            return render_to_response("search_page.html", {"error": "page doesn't exist"})
        return render_to_response("view_page.html", {"title": article.title, "content": article.content})
    else:
        return render_to_response("search_page.html", {"error": "page doesn't exist."})


def edit_page(request):
    c = {}
    c.update(csrf(request))
    if "title" in request.GET:
        article_name = request.GET["title"]
        try:
            article = Article.objects.get(title=article_name)
            content = article.content
        except Article.DoesNotExist:
            content = ""

        c["title"] = article_name
        c["content"] = content
        return render_to_response("edit_page.html", c)

        def save_page(request):
            if request.method == 'POST':

                if "title" in request.POST and "content" in request.POST and request.POST["title"]:

                    c = {}
                    c.update(csrf(request))
                    try:
                        article = Article.objects.get(title=request.POST["title"])
                        article.content = request.POST["content"]
                    except Article.DoesNotExist:
                        article = Article(request.POST["title"], request.POST["content"])
                        article.save()
                        return HttpResponseRedirect("/view_page/?title="+request.POST["title"])
                    return render_to_response("create_page.html", c)

这是我的模特:

class Article(models.Model):
    title = models.CharField(primary_key=True, unique=True, max_length=20)
    content = models.TextField(blank=True)

2 个答案:

答案 0 :(得分:1)

看起来问题可能出现在try视图的try-catch部分的save_page()块中,请尝试以下操作:

def save_page(request):
    if request.method == 'POST':

        if "title" in request.POST and "content" in request.POST and request.POST["title"]:

            c = {}
            c.update(csrf(request))
            try:
                article = Article.objects.get(title=request.POST["title"])
                article.content = request.POST["content"]
                article.save()
            except Article.DoesNotExist:
                article = Article(request.POST["title"], request.POST["content"])
                article.save()
                return HttpResponseRedirect("/view_page/?title="+request.POST["title"])
            return render_to_response("create_page.html", c)

以前,如果以前存在该文章,则在内容更新后不会保存。

修改:您可以尝试使用以下内容调试edit_page()视图:

def edit_page(request):
    c = {}
    c.update(csrf(request))
    if "title" in request.GET:
        article_name = request.GET["title"]
        try:
            article = Article.objects.get(title=article_name)
            content = article.content
            print "article: %s retrieved from database" % article_name
        except Article.DoesNotExist:
            print "article: %s not found in database" % article_name
            content = ""

        c["title"] = article_name
        c["content"] = content
        return render_to_response("edit_page.html", c)

如果您使用./manage.py runserver,则调试消息应与http请求混合在一起,如果数据库正在正确检索文章,则模板必定存在问题。

答案 1 :(得分:0)

我想出了问题,我现在才发现时间在这里发布,但迟到总比没有好,呵呵。 无论如何,问题出在db的数据检索过程中。当我存储数据时,它保存字符串而没有引号,即''。并且冲突是在view_page中我的查询请求带有标题的文章,比如TITLE。但在edit_page中,查询请求标题为“TITLE”的文章。 (注意引号)。因而错误。 尽管如此,页面显示标题的原因是我将作为参数传递的标题存储在响应字典中的视图而不是数据库提取的值。