Форма не отображается на странице - PullRequest
0 голосов
/ 02 августа 2020

Эй, ребята, нужна небольшая помощь, не могу понять это. По какой-то причине моя форма не отображается на моей странице, пожалуйста, посмотрите код ниже.

forms.py

class NewEntryForm(forms.Form):
    title = forms.CharField(label = "Title")
    content = forms.CharField(label = "Body")

views.py

def new(request):
    if request.method == 'POST':
        form = NewEntryForm(request.POST)
        if form.is_valid():
            title = form.cleaned_data['title']
            content = form.cleaned_data['body']
            content = markdown2.markdown(title)
            filename = f"entries/{title}.md"
            if default_storage.exists(filename):
                return render(request, "encyclopedia/error.html", {
                    "error":'A file with this title already exists.'
                })
            else:
                util.save_entry(title, content)
                return redirect('entry_page', title=title)
    else:
        return render(request, 'encyclopedia/new.html', {'form':NewEntryForm()})

urls. py

urlpatterns = [
    path("", views.index, name="index"),
    path("wiki/<str:title>", views.entry, name="entry"),
    path("search/", views.search, name="search"),
    path("wiki/new", views.new, name="new")
]

новый. html

{% extends "encyclopedia/layout.html" %}

{% block title %}
  Encyclopedia
{% endblock %}

{% block body %}
  <form class="" action="" method="post">
    {% csrf_token %}
    {{form}}
    <input type="submit" name="" value="Submit">

  </form>
{% endblock %}

Вывод страницы

вывод cli

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Оказывается, это был мой файл urls.py. URL-адрес, который принимает аргумент str, подтверждал пустую страницу, потому что Django проверяет URL-адреса последовательно. Я просто переместил URL-адрес str в конец urls.py, и это сработало.

0 голосов
/ 02 августа 2020

Можете ли вы попробовать:

def new(request):
    if request.method == 'POST':
        form = NewEntryForm(request.POST)
        if form.is_valid():
            # ...
    else:
        form = NewEntryForm()
        
    return render(request, 'encyclopedia/new.html', {'form': form})

Логически то, что вы пропустили в этой части (внутри хранилища по умолчанию)

return render(request, "encyclopedia/error.html", {
    "error": 'A file with this title already exists.'
})

, - это то, что вы визуализировали ошибки но вы не включили фактическую форму. Технически, вы также можете исправить это, как в этом примере ниже, но я бы предпочел сделать это так, как нам дала документация .

return render(request, "encyclopedia/error.html", {
    "error": 'A file with this title already exists.',
    "form": form    # you didn't include your form in the inner return
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...