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

#django #python-3.x

#django #python-3.x

Вопрос:

Помогите мне, пожалуйста!

Извините за мой английский, я слаб в английском!

Я пытаюсь посетить эту страницу 192.168.56.102 / project / BP / 4 , она показывает мне сообщение об ошибке! те же конфигурации URL-адресов и просмотров с другой страницей, это работает нормально.

 Reverse for '' not found. '' is not a valid view function or pattern name.
Request Method: GET
Request URL:    http://192.168.56.102/project/BP/4
Django Version: 2.1.7
Exception Type: NoReverseMatch
Exception Value:    
Reverse for '' not found. '' is not a valid view function or pattern name.
  

urls.py :

 urlpatterns = [
    #Project : 
    path('', views.projects , name = 'project'),
    path('BP/<int:id_project>', views.tb_project , name='tb_project'),
    path('add/', views.add_project , name = 'add_project'),
    path('delete/p/<int:id_project>',views.delete_project , name='delete_project'),
    path('edit/<int:id_project>' , views.edit_project , name = 'edit_project'),
    #Zone Action : 
    path('zone/<int:id_project>/' , views.list_zones , name ='list_zone'),
    path('zone/add/<int:id_project>/' , views.add_ZoneAction , name = 'add_zone'),
    path('delete/z/<int:id_project>/<int:id_zone>',views.delete_zone , name='delete_zone'),
    path('zone/edit/<int:id_zone>' , views.edit_ZoneAction , name = 'edit_zone'),
]
  

views.py :

 def tb_project(request,id_project):
    template ="project/bord_project.html"
    context = {}
    prj = get_object_or_404(project ,id = id_project)
    context["prj"] = prj
    return render(request, template ,context)
  

page.html

 <a href="{% url 'tb_project' element.id %}"> 
<!-- element.id = 4 -->
  

ссылка отображается на странице правильно: 192.168.56.102/project/BP/4 но когда я нажимаю, чтобы перейти к bord_project.html , я вижу сообщение об ошибке!

Page.html :
list_tuple является контекстной переменной

 {% extends "base.html" %}
{% load static %}

{% block contenu %}

    <div class="container">

        {% for elements in list_tuple  %}

        <div class="row" style="margin-top : 10px;">

            {% for element in elements %}

            <div class = "col-4">
                <div class="card text-center">
                    <div class="card-header">
                        Projet
                    </div>
                    <div class="card-body">
                        <h5 class="card-title">

                            {{ element.intitule }}
                        </h5>
                        <p class="card-text">

                            {{ element.description|truncatewords:7 }}
                        </p>
                        <a href="{% url 'tb_project' element.id %}" class="btn btn-info">

                            {# link #}
                            Plus amp;raquo;
                        </a> 
                    </div>
                    <div class="card-footer text-muted">

                        {{ element.date }}
                    </div>
                </div>
            </div>

            {% endfor %}

        </div>

        {% endfor %}

    </div>  
  

на данный момент bord_project.html пустое

 {% extends "base.html" %}
{% load static %}

{% block contenu %}
  {# blank for the moment #}
{% endblock %}
  

Комментарии:

1. Пожалуйста, покажите project/bord_project.html вместо page.html .

2. спасибо @Alasdair , я редактирую сообщение и добавляю project/bord_project , page.html

3. На ваш взгляд, prj = get_object_or_404(project ,id = id_project) называется ли модель project ? Вероятно, это Project

4. В сообщении об ошибке говорится, Reverse for '' но ни один из {% url %} показанных вами тегов не вызвал бы эту ошибку. Возможно, проблема в base.html

5. спасибо @Pedro, нет, это проект, я забыл указать его с большой буквы

Ответ №1:

Я не верю, что проблема в каком-либо коде, который вы вставили. Вам следует запустить $ grep -r -E "reverse|url" . или аналогичную команду поиска, чтобы найти любые разрешения URL, которые могут отсутствовать.

Где-то у вас есть вызов reverse[_lazy] функции или url templatetag, который выполняет неверный поиск.

Убедитесь, что при любом использовании url тега templatetag вокруг имени представления используются кавычки.

Комментарии:

1. Спасибо @Joshua, ошибка была в родительском html-файле base.html , часть кода была в commantaire, и сервер не игнорирует ее