2013-11-16 2 views
1

У меня есть приложение для вики, в котором хранятся, сохраняются, редактируются возможности. когда я создаю страницу wiki, она отлично хранится, и в представлении view_page нет проблем с извлечением своих данных из базы данных и их отображением в браузере. Но проблема возникает, когда я нажимаю кнопку редактирования, и она появляется в виде edit_page, который не извлекает данные. Он извлекает заголовок, но он не извлекает содержимое и вызывает исключение Article.DoesNotExist.Django: Конфликтующее поведение во взглядах

вот два мнения:

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) 
+0

edit_page отображает заголовок, но содержимое не извлекается по какой-либо причине. Если я снова использую представление view_page, он отображает как заголовок, так и контент. Я не знаю, что и где проблема. –

+0

Можем ли мы увидеть код для вида, в котором вы сохраняете контент и заголовок для своего объекта? –

+0

добавил изображение save_page. –

ответ

0

Я понял, что проблема, и я только сейчас нашел время, чтобы опубликовать ее здесь, но лучше поздно, чем никогда, да. В любом случае проблема заключалась в процедуре извлечения данных из db. когда я храню данные, он сохраняет строки без кавычек i.e ''. и конфликт состоял в том, что на странице view_page мой запрос запрашивает статью с заголовком, скажем, TITLE. но в edit_page запрос запрашивал статью с заголовком «TITLE». (обратите внимание на цитаты). и, следовательно, ошибка. Причина, по которой страница отображала заголовок, тем не менее, заключалась в том, что я сохранял заголовок, переданный как аргумент в представлении в словаре ответа, а не значения, полученные с помощью базы данных.

1

Похоже, что проблема может быть в try блоке секции примерки улова 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) 

Ранее, если артикль e ранее существовал, он не сохранялся после обновления содержимого.

Edit: Вы можете попробовать отладки 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, если база данных извлекая статьи правильно, должна быть проблема с шаблоном.

+0

Я добавил команду article.save(), но проблема все еще сохраняется. –

+0

Это изменение сохраняет данные ПОСЛЕ редактирования. но это не была настоящая проблема. проблема заключалась в том, что контент не извлекался из базы данных. данные фиксируются, view_page извлекает его, но edit_page не может. –

+0

@ZaidTariq Я добавил редактирование об отладке вида редактирования, помогает ли это? –

Смежные вопросы