Не найдена реверсия для 'new_project' с аргументами '('',)'. Попробовано 1 паттерн(ов): ['new_project/$'].

Я только что научился использовать python и Django в течение 2 недель, и я пытаюсь построить список дел. Я столкнулся с ошибкой, и мне может понадобиться совет по этому поводу.

В списке дел есть страница для всех проектов, и когда вы нажимаете на проект, появляется список дел. Я пытался достичь функции добавления нового проекта с помощью этих кодов, но она возвращает ошибку, как показано в заголовке, я просмотрел много ответов в интернете, большинство причин, которые вызвали проблему, были из-за неправильного введения URL в HTML файл или когда вы указали больше значений, чем форма в views.py и забыли поместить их за url.

Я все еще не могу понять ошибку, я был бы очень признателен, если бы вы могли дать мне несколько подсказок, где я могу ошибиться. Спасибо

urls.py

app_name = 'todo_lists'
urlpatterns = [
    # homepage
    path('', views.index, name='index'),
    # page that shows all projects
    path('projects/', views.projects, name='projects'),
    # details of a project
    path('projects/<int:project_id>/', views.project, name='project'),
    # add a new project
    path('new_project/', views.new_project, name='new_project'),

views.py

def new_project(request):
    # add new project
    
    if request.method != 'POST':
        # if not submit then create a new form for user
        form = ProjectForm()
    else:
        form = ProjectForm(request.POST)
        if form.is_valid():
            
            form.save()
            return HttpResponseRedirect(reverse('todo_lists:projects'))
# team', 'name', 'due_date', 'project_code', 'details
    context = {'form': form}
    return render(request, 'todo_lists/new_project.html', context)

models.py

class Project(models.Model):
    
    name = models.CharField(max_length=20) 
    create_date = models.DateTimeField(auto_now_add=True)
    due_date = models.DateTimeField(default=datetime.datetime.now)
    project_code = models.CharField(max_length=20)
    details = models.TextField()
    team = models.CharField(max_length=200)

    def __str__(self):
        return self.details

forms.py

class ProjectForm(forms.ModelForm):
    class Meta:
        model = Project
        fields = ['team', 'name', 'due_date', 'project_code', 'details']
        widgets = {
                    'start_date': forms.SelectDateWidget(),
                    'due_date': forms.SelectDateWidget(),
        }

new_project.html

<!doctype html>
{% extends "todo_lists/base.html" %}

{% block content %}
    <p>Add a new project:</p>

    <form action="{% url 'todo_lists:new_project' %}" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button name="submit">Add project</button>
    </form>
    <!-- <a href="{% url 'todo_lists:new_project' project.id %}">Add a new project:</a>
 -->
{% endblock content %}

projects.html

<!doctype html>
{% extends "todo_lists/base.html" %}

{% block content %}

    <p>Projects</p>
    <a href="{% url 'todo_lists:new_project' %}">Add new project</a>
    <ul>
        {% for project in projects %}
            <li>
                <a href="{% url 'todo_lists:project' project.id %}">{{ project.id }}</a>
                <!-- <a href="{% url 'todo_lists:project' project.id %}">{{ project }}</a> -->
                <p>Name: {{ project.name }}</p>
                <p>Due date: {{ project.due_date }}</p>
                <p>project_code: {{ project.project_code }}</p>
                <p>details: {{ project.details }}</p>
                <p>team: {{ project.team }}</p>
            </li>
        {% empty %}
            <li>No project has been added yet.</li>
        {% endfor %}
    </ul>

    {% endblock content %}

Спасибо, Marcel h и BrianD, я нашел ответ, оказалось, что именно комментарий вызвал проблему, даже если я сделал его как комментарий, он все равно вызвал проблему, мое решение - удалить этот комментарий.

Шаблонные теги в html-комментариях по-прежнему отображаются шаблонизатором. Для демонстрации:

from django import template

t = template.Template("""
<!-- {% url 'test' %} -->
""")

t.render(template.Context())

Возвращается:

NoReverseMatch: Обратное соответствие для 'test' не найдено. 'test' не является допустимой функцией представления или именем шаблона.

Несмотря на то, что тег шаблона url заключен в html-комментарий, он все равно выдает ошибку, если нет url с именем test.

Вернуться на верх