/ web2app / open_note / user001 / bla中的NoReverseMatch
找不到带有参数'('',)'的'note_page'的反向。尝试了1个模式:['web2app / note_page /(?P [^ /] +)$']
[在文件main_page.html中,我使用open_note url进行操作,当我什至不调用它时,我在note_page url中遇到此错误
urls.py
from django.urls import path
from . import views
app_name = 'web2app'
urlpatterns = [
path('', views.login_page, name = 'login_page'),
path('main_page', views.login, name = 'login'),
path('note_page/<str:username>', views.note_page, name = 'note_page'),
path('open_note/<str:username>/<str:theme>', views.open_note, name = 'open_note'),
path('save_note/<str:username>', views.save_note, name = 'save_note'),
path('registration_page', views.registration_page, name = 'registration_page'),
path('registration', views.registration, name = 'registration'),
path('<int:note_id>/put_text', views.put_text, name = 'put_text')
]
views.py
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import render
from .models import Note, User
from django.urls import reverse
from django.utils import timezone
def login_page(request):
return render(request, 'web2app/login_template.html', {'bool': -1})
def login(request):
user = User.objects.filter(username = request.POST['username'], password = request.POST['password'])
if(len(user) != 0):
user_temp = user[0]
user_notes = user_temp.note_set.all()
return render(request, 'web2app/main_page.html', {'user_notes': user_notes, 'username': user_temp.username})
else:
return render(request, 'web2app/login_template.html', {'bool': 0})
def registration_page(request):
return render(request, 'web2app/registration_template.html', {'bool': -1})
def registration(request):
username = request.POST['Username1']
password = request.POST['Password1']
confirm_password = request.POST['Confirm_password1']
if (password == confirm_password):
user = User(username=username, password=password)
user.save()
user_notes = []
return render(request, 'web2app/main_page.html', {'user_notes': user_notes})
else:
return render(request, 'web2app/registration_template.html', {'bool': 0})
def note_page(request, username):
return render(request, 'web2app/note_template.html', {'username': username}, {'bool_create': 1})
def save_note(request, username):
theme = request.POST['theme']
text = request.POST['text']
date = timezone.now()
last_edit = date
last_user = User.objects.get(username=username)
note = Note(theme=theme, text=text, date=date, last_edit=last_edit, last_user=last_user)
note.save()
user_notes=last_user.note_set.all()
return render(request, 'web2app/main_page.html', {'user_notes': user_notes, 'username': username})
def open_note(request, username, theme):
user = User.objects.get(username = username)
note = user.note_set.all().get(theme=theme)
return render(request, 'web2app/main_page.html', {'note': note}, {'username': username}, {'bool_create': 0})
login_temlate.html
{% extends 'LogInPage.html' %}
{% block login_action %}
<form action="{% url 'web2app:login' %}" method="POST">
{% csrf_token %}
<div class="topnav">
<input type="text" placeholder="Login" required name="username">
</div>
<div class="topnav">
<input type="text" placeholder="Password" required name="password">
</div>
{% if bool == 0 %}
<div class="login-error"> Invalid login or password </div>
{% endif %}
<button class="login_button" type="submit" >LOGIN</button>
</form>
{% endblock %}
main_page.html
{% extends 'base.html' %}
{% block notes %}
{% if user_notes%}
{% for element in user_notes%}
<form action="{% url 'web2app:open_note' username element.theme %}" >
<button class="item">
<h1>{{element.theme}}</h1>
<h2>{{element.text}}</h2>
</button>
</form>
{% endfor %}
{% else %}
<div class="NoNotes"> Oops, it seems like you haven`t add any notes yet, </br> try now CLICK NEW NOTE </div>
{% endif %}
{% endblock %}
{% block user_name%}
{{username}}
{% endblock%}
{% block new_note%}
<form action="{% url 'web2app:open_note' username %}" >
{% csrf_token %}
<button class="sort-button" style="width: 160px"> New note </button>
</form>
{% endblock%}
note_template.html
{% extends "note.html" %}
{% block content %}
<form action="{% url 'web2app:save_note' username %}" method="POST">
{% csrf_token %}
<div class="bg-text">
<p style="font-size:50px"> Theme </p>
{% if bool_create %}
<textarea name="theme" placeholder="Тема" style="height:50px"></textarea>
<textarea name="text" placeholder="Оставьте ваш текст "></textarea>
{% else %}
<textarea name="theme" placeholder="Тема" style="height:50px">{{note.theme}}</textarea>
<textarea name="text" placeholder="Оставьте ваш текст ">{{note.text}}</textarea>
{% endif%}
<button type="submit" >Save</button>
</div>
</form>
{% endblock %}
open_note
的路径需要两个参数username
和theme
:
path('open_note/<str:username>/<str:theme>', views.open_note, name = 'open_note'),
但是在模板中,您只能传递一个参数:
{% url 'web2app:open_note' username %}
因此,您需要为theme
多传递一个:
{% url 'web2app:open_note' username value-for-theme %}
您将value-for-theme
替换为theme
变量的值。