Django运行其他网址,不是我叫的那些网址

问题描述 投票:0回答:1

/ 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 %}
django url view
1个回答
1
投票

open_note的路径需要两个参数usernametheme

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变量的值。

© www.soinside.com 2019 - 2024. All rights reserved.