MultiValueDictKeyError в / EditPage - Django, Python, Html - PullRequest
1 голос
/ 12 июля 2020

У меня есть эта ошибка из задачи курса веб-программирования:

Цель функции - написать или обновить текст, который поставляется со страницей в текстовой области, сохранить в том же открытом файле и перенаправить на другая страница.

Django Ошибка:

MultiValueDictKeyError в / EditPage 'NewContent'

 Request Method:POST
    -Request URL:http://127.0.0.1:8000/EditPage 
    -Django Version:3.0.8v
    -Exception Type:MultiValueDictKeyError
    -Exception Value:'NewContent'
    -Exception Location:C:\Python38\lib\site-packages\django\utils\datastructures.py
    in __getitem__, line 78
    -Python Executable: C:\Python38\python.exe
    -Python Version:    3.8.3
 
*Exception Type: MultiValueDictKeyError at /EditPage
Exception Value: 'NewContent'* 

My HTML:


<h2>{{title}}</h2>
<br>

<form  action="{% url 'encyclopedia:EditPage'  %}"  method="post" width=90% >
     {% csrf_token %}

     <label for="NewContent"><h4>Change Encyclopedia Item :</h4></label>
     <textarea type="text" wrap="hard" onclick="showNewcontent()" name="NewContent" id="NewContent">
     {{content}}
     </textarea>
     <br>
     <form class="form-inline" style="position:relative ; top:15px" >
          <p><button type="submit" class="btn btn-success">Save New Content</button>
          <button type="button" class="btn btn-danger">
          <a href="{% url 'encyclopedia:index' %}">Cancel</button>
          </p>
     </form>
</form>

Мой JS

<script>
function showNewcontent() {
   var x = ""; var depois = "";
   var x = document.getElementById("content").value;
   document.getElementById("NewContent").innerHTML = x;
   var depois = document.getElementById("NewContent").value;
   alert(x);
}
</script>

Мой Python:

def EditPage(request):
    
    if request.method == "POST":
        entry = str(request.POST["entry"])
        title = str( request.POST["title"])
        print("Reading:" , "Título:",title, "Entry:", entry)
        content =util.get_entry(title)
        print(content)
        NewContent= request.POST["NewContent"]
        print("Will Save:", NewContent)
        if len( NewContent) >0:
            pagename = "Wiki/"+title.capitalize()
            filename =  f"entries/{title}.md"
            print(pagename, filename)
            with open (filename, "w") as myfile:
                myfile.seek(0,0)
                myfile.write(NewContent)
                myfile.save()

            context={
                     "page": "EntryPage",
                     "pagename":pagename,
                     "entry":entry,
                     "title":title,
                     "content":NewContent,
                     "encyclopedia": request.session["Pwiki"]
                     }
            return render(request, "encyclopedia/EntryPage.html", context)
        else:
            return render(request, "encyclopedia/EditPage.html",
                         {"message":" The content is empty, please try again"})
    else:
        context = {
                  "message":"Empty Form didn´t get into POST",
                  }
        return render(request, "encyclopedia/EditPage.html" ,context)

1 Ответ

0 голосов
/ 12 июля 2020

Пожалуйста, используйте get метод request.POST вместо прямого индексации ключа.

Например, замена

NewContent = request.POST["NewContent"]

на

NewContent = request.POST.get("NewContent")

разрешит эта ошибка MultiValueDictKeyError at /EditPage 'NewContent'

Вы также можете использовать метод get для других ключей, таких как entry и title.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...