我正在嘗試創建具有以下功能的 Addpage 函式;
- 單擊側欄中的“創建新頁面”應該會將用戶帶到他們可以創建新百科全書條目的頁面。
- 保存頁面時,如果已存在具有提供標題的百科全書條目,則應向用戶顯示錯誤訊息。
- 否則,應將百科全書條目保存到磁盤,并且應將用戶帶到新條目的頁面。
視圖.PY
class AddPageForm(forms.Form):
title = forms.CharField()
content = forms.CharField(widget=forms.Textarea(
attrs={
"class": "form-control",
})
)
def add_page(request):
if request.method == "POST":
form = AddPageForm(request.POST)
if form.is_valid():
title = form.cleaned_data['title']
content = form.cleaned_data['content']
entries = util.list_entries()
for entry in entries:
if title.upper() == entry.upper():
return render(request, "encyclopedia/errorpage.html")
else:
return redirect('encyclopedia:entrypage', title=title)
util.save_entry(title, content)
else:
return render(request, "encyclopedia/addpage.html", {
"form": AddPageForm()
})
網址.PY
app_name = "encyclopedia"
urlpatterns = [
path("", views.index, name="index"),
path("wiki/<str:title>", views.entry_page, name="entrypage"),
path("add_page", views.add_page, name="addpage"),
添加頁面
<h1>Add Page</h1>
<form action="{% url 'encyclopedia:addpage' %}" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" class="btn btn-secondary">
</form>
{% endblock %}
實用程式.PY
def save_entry(title, content):
"""
Saves an encyclopedia entry, given its title and Markdown
content. If an existing entry with the same title already exists,
it is replaced.
"""
filename = f"entries/{title}.md"
if default_storage.exists(filename):
default_storage.delete(filename)
default_storage.save(filename, ContentFile(content))
def list_entries():
"""
Returns a list of all names of encyclopedia entries.
"""
_, filenames = default_storage.listdir("entries")
return list(sorted(re.sub(r"\.md$", "", filename)
for filename in filenames if filename.endswith(".md")))
布局.HTML
<div>
<a href="{% url 'encyclopedia:addpage' %}">Create New Page</a>
</div>
我目前遇到的問題是,當我單擊“添加”按鈕并輸入一個已經存在的標題(例如 CSS)時,它應該將我帶到錯誤頁面,但它會提交,但是我輸入的內容沒有保存到條目中/主頁。
第二個問題是,當我單擊“添加”按鈕并輸入一個新標題(應該提交并保存在我的主頁上)時,它反而將我帶到錯誤頁面。
你能指出我做錯了什么嗎?
uj5u.com熱心網友回復:
在您的for回圈中,它只會檢查第一項,如果它不是現有條目,它將立即重定向(它永遠不會到達第二項)。而您可能希望它檢查所有條目,如果它不存在,則添加并重定向?
例如。這會更好嗎?
def add_page(request):
if request.method == "POST":
form = AddPageForm(request.POST)
if form.is_valid():
title = form.cleaned_data['title']
content = form.cleaned_data['content']
entries = util.list_entries()
for entry in entries:
if title.upper() == entry.upper():
return render(request, "encyclopedia/errorpage.html")
util.save_entry(title, content)
return redirect('encyclopedia:entrypage', title=title)
else:
return render(request, "encyclopedia/addpage.html", {
"form": AddPageForm()
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400907.html
標籤:姜戈 django-views django-forms django-模板 CS50
下一篇:Django-在模板中顯示影像
