【问题标题】:Django - 找不到''的反向。 '' 不是有效的视图函数或模式名称
【发布时间】:2018-01-25 05:07:18
【问题描述】:

我正在研究我的课程项目,但我现在完全陷入困境。我正在创建一个通过贝宝销售产品的网站,而贝宝退货/取消页面无法正确呈现。我已经按照课程中的示例检查了代码一百次,但显然我遗漏了一些东西。

我在访问产品时遇到错误,单击立即购买,登录到贝宝,然后取消购买或购买产品并返回商家页面。 paypal_return.html 和 paypal_cancel.html 是保存在 templates/paypal/ 下的 2 个模板

谁能看到我错过了什么?

这里可以看到完整代码https://github.com/IreneG5/spss_online

追溯

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/paypal-cancel/

Django Version: 1.11.4
Python Version: 2.7.12
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django_forms_bootstrap',
 'paypal.standard.ipn',
 'home',
 'accounts',
 'paypal_store',
 'products']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template C:\Users\irene\Documents\Full-Stack-Developer\Stream3\Project\spss_online\templates\base.html, error at line 10
   Reverse for '' not found. '' is not a valid view function or pattern name.   1 : {% load staticfiles %}
   2 : <!DOCTYPE html>
   3 : <html lang="en">
   4 : <head>
   5 :     <meta charset="UTF-8">
   6 :     <title>Buy SPSS Online</title>
   7 :     <meta name="viewport" content="width=device-width, initial-scale=1.0">
   8 :     <meta name="description" content="">
   9 :     <meta name="author" content="">
   10 :     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/cerulean/bootstrap.min.css">
   11 :     <link rel="stylesheet" href="{% static 'css/style.css' %}">
   12 : 
   13 : 
   14 : </head>
   15 : <body>
   16 : <div class="container">
   17 :     <div class='container-fluid'>
   18 :         <nav id="menu" class="navbar navbar-inverse">
   19 :             <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
   20 :                 <span class="icon-bar"></span>


Traceback:

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\core\handlers\exception.py" in inner
  41.             response = get_response(request)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\core\handlers\base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\core\handlers\base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\irene\Documents\Full-Stack-Developer\Stream3\Project\spss_online\paypal_store\views.py" in paypal_cancel
  15.     return render(request, 'paypal/paypal_cancel.html', args)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\shortcuts.py" in render
  30.     content = loader.render_to_string(template_name, context, request, using=using)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\loader.py" in render_to_string
  68.     return template.render(context, request)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\backends\django.py" in render
  66.             return self.template.render(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\base.py" in render
  207.                     return self._render(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\base.py" in _render
  199.         return self.nodelist.render(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\base.py" in render
  990.                 bit = node.render_annotated(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\base.py" in render_annotated
  957.             return self.render(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\loader_tags.py" in render
  177.             return compiled_parent._render(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\base.py" in _render
  199.         return self.nodelist.render(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\base.py" in render
  990.                 bit = node.render_annotated(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\base.py" in render_annotated
  957.             return self.render(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\loader_tags.py" in render
  72.                 result = block.nodelist.render(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\base.py" in render
  990.                 bit = node.render_annotated(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\base.py" in render_annotated
  957.             return self.render(context)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\template\defaulttags.py" in render
  458.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\urls\base.py" in reverse
  91.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))

File "C:\Users\irene\virtualenv\spss_online_env\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
  497.         raise NoReverseMatch(msg)

Exception Type: NoReverseMatch at /paypal-cancel/
Exception Value: Reverse for '' not found. '' is not a valid view function or pattern name.

【问题讨论】:

  • 您必须使用应用名称,例如。 {% url 'core:home' %} 这里 core 是应用的名称, home 是视图名称。

标签: python django paypal render


【解决方案1】:

我在测试时也遇到了同样的问题,对我来说这是当 html 中的 url 为空时引起的

<td><a href="{% url '' test.id %}"><i class="fa fa-times" aria-hidden="true"></i></a></td>

所以在我通过输入网址名称进行更改后:

<td><a href="{% url 'task_delete' test.id %}"><i class="fa fa-times" aria-hidden="true"></i></a></td>

【讨论】:

    【解决方案2】:

    您可以使用其中之一。

    如果你没有 (app_name) 这是解决方案

    在 urls.py 中

    urlpatterns = [
        path('', dashboard.as_view(), name='dashboard'),
    ]
    

    在模板.html中

    <a href="{% url 'dashboard' %}"></a>
    

    如果你这样做了(app_name) 这是解决方案

    在 urls.py 中

    app_name = 'Blog'
    urlpatterns = [
        path('', dashboard.as_view(), name='dashboard'),
    ]
    

    在模板.html中

    <a href="{% url 'Blog:dashboard' %}"></a>
    

    【讨论】:

      【解决方案3】:

      假设在您的模板 home.html 中,您有一个执行 POST 请求的表单,例如:

      <form id="form_id" action = "{% url 'home' %}" method = "post" > .. </form>
      

      在你的 urls.py 中有

      url(r'^$', views.home_view, name='home')
      

      在您看来,您可以像这样检查模板中传递的数据。

      def home_view(request): print(request.POST)
      

      在 urls.py 中声明一个 name='home' 并在表单的操作部分中包含此 url action = "{% url 'home' % }"

      【讨论】:

        【解决方案4】:

        如果忘记在项目 url 中添加应用程序 url 也会出现此错误

        示例: 项目/urls.py

        from django.contrib import admin
        from django.urls import path, include
        
        urlpatterns = [
            path('admin/', admin.site.urls),
            path('', include('app.urls')),
        ]
        

        你有一个 store/urls.py

        所以如果您在 store/templates/store 中有 html 代码 并且您想在 app/templates/app 中添加一个带有 url 的标签到 store/templates/store

        中的 html 代码

        您必须在 Project/urls.py

        中包含 store/urls.py

        项目/urls.py

        from django.contrib import admin
        from django.urls import path, include
        
        urlpatterns = [
            path('admin/', admin.site.urls),
            path('', include('app.urls')),
            path('', include('store.urls')),
        ]
        

        【讨论】:

          【解决方案5】:

          我也遇到过同样的问题。错误是我为多个 urlpatterns 声明了相同的名称。

           path('file', views.sender, name='sender'),
          

          这里的名称应该是不同的,并且对于不同的url是唯一的。

          【讨论】:

            【解决方案6】:

            在应用程序的 urls.py 文件中指定 app_name 并使用此 app_name 以及模板中 url 的字符串文字视图名称:

            syntax --> {% url 'app_name:urlname' %}
            
            app_name = "demo".   # right above url patterns in app
            url_patterns = [
            ('login/', views.login, name = 'login')
            ]
            
            <a href="{% url 'demo:login' %}".  # Use this in templatep
            

            注意:在 urls.py 文件中使用url_patterns 正上方的app_name

            【讨论】:

              【解决方案7】:

              *始终确保在使用 HttpResponseRedirect 和 reverse 时,您在 reverse 中指定的名称与您在 urls.py 中为路径指定的名称相同

              'return HttpResponseRedirect(reverse("index")) path("index/",views.index,name="index")'

              这就是我遇到的问题,我通过反复试验发现了*

              【讨论】:

                【解决方案8】:

                *始终确保在使用 HttpResponseRedirect 和 reverse 时,您在 reverse 中指定的名称与您在 urls.py 中为路径指定的名称相同

                这就是我遇到的问题,我通过反复试验发现了*

                【讨论】:

                  【解决方案9】:

                  应用名称=演示 url=/学生

                  href="{% url 'demo:student' %}"

                  确保您在 :(冒号)之前或之后不应有空格

                  【讨论】:

                    【解决方案10】:

                    就我而言,发生此错误是因为我忘记将app_nameurl_name 一起添加。 下面是我的应用urls.py

                        app_name = "wikis"
                        urlpatterns = [
                            path("", views.index, name="index"),
                            path("wiki/<str:name>", views.get_page, name="get_page"),
                           ]
                    

                    下面是我的函数的返回语句,我忘记将app_name 放在反向 URL 中

                        return HttpResponseRedirect(reverse("get_page", kwargs={'name':title}))
                    

                    正确的代码是

                        return HttpResponseRedirect(reverse("wikis:get_page", kwargs={'name':title}))
                    

                    【讨论】:

                      【解决方案11】:

                      在我的情况下,由于mismatched url 名称而发生此错误。例如,

                      <form action="{% url 'test-view' %}" method="POST">
                      

                      urls.py

                      path("test/", views.test, name='test-view'),
                      

                      【讨论】:

                        【解决方案12】:

                        就我而言,我没有将 namespace_name 放在 url 标记中,例如:{% url 'url_name or pattern name' %}. 您必须指定命名空间名称,例如:{% url 'namespace_name:url_name or pattern name' %}.

                        解释: 在项目 urls.py path('', include('blog.urls',namespace='blog')), 和应用程序的 urls.py 中,您必须指定 app_name。喜欢app_name = 'blog'。 namespace_name 是 app_name。

                        【讨论】:

                          【解决方案13】:

                          将商店名称添加到模板中,例如{% url 'app_name:url_name' %}

                          App_name = 商店

                          在 urls.py 中, path('search', views.searched, name="searched"),

                          &lt;form action="{% url 'store:searched' %}" method="POST"&gt;

                          【讨论】:

                            【解决方案14】:

                            我发现的常见错误是您忘记定义 你的网址在yourapp/urls.py

                            我们不想要任何建议! 解决方案请..

                            【讨论】:

                              【解决方案15】:

                              在 urls.py 中使用相同的名称

                               path('detail/<int:id>', views.detail, name="detail"),
                              

                              【讨论】:

                              • 您能否详细介绍一下您的建议?为什么会有帮助?
                              【解决方案16】:

                              就我而言,我所做的是相应模板中的 url 标记中的错误。所以,在我的 url 标签中,我有类似

                              {% url 'polls:details' question.id %}

                              在视图中,我写了如下内容:

                              def 详细信息(请求,问题 ID): 代码在这里

                              因此,您可能要检查的第一件事是是否按应有的方式拼写。接下来你可以做的就是按照上面的人的建议。

                              【讨论】:

                                【解决方案17】:

                                如果你没有在路径字段中定义名称,通常会出现错误。 例如:path('crud/',ABC.as_view(),name="crud")

                                【讨论】:

                                • 这不是答案。编辑它以解决问题或将其写入 cmets。
                                【解决方案18】:

                                当我没有在模式名称之前指定 app 名称时,我收到了同样的错误。 就我而言:

                                app-name:博客

                                pattern-name:删除后

                                reverse_lazy('Blog:post-delete') 工作。

                                【讨论】:

                                • 你在哪里添加reverse_lazy('Blog:post-delete')
                                • @DerekPK 例如,在分配给success_urlget_success_url 方法时。
                                【解决方案19】:

                                在第 10 行,st 之间有一个空格。应该是一个字:stylesheet

                                【讨论】:

                                • 你能进一步解释一下吗?为什么额外的空间会触发给定的错误?
                                【解决方案20】:

                                在 urls.py 文件中修复 urlpatterns

                                例如,我的应用名称是“模拟器”,

                                loginlogout 的 URL 模式看起来像

                                urlpatterns = [
                                    ...
                                    ...
                                    url(r'^login/$', simulator.views.login_view, name="login"),
                                    url(r'^logout/$', simulator.views.logout_view, name="logout"),
                                    ...
                                    ...
                                
                                ]
                                

                                【讨论】:

                                  【解决方案21】:
                                  1. 指定 url 的语法是{% url namespace:url_name %}。因此,请检查您是否在 urls.py 中添加了app_name
                                  2. 就我而言,我拼错了 url_name。 urls.py 具有以下内容 path('&lt;int:question_id&gt;/', views.detail, name='question_detail') 而 index.html 文件具有以下条目 &lt;li&gt;&lt;a href="{% url 'polls:detail' question.id %}"&gt;{{ question.question_text }}&lt;/a&gt;&lt;/li&gt;。注意不正确的名称。

                                  【讨论】:

                                  • 在我的例子中,我将 app_name 添加到我的 urls.py 中,然后错过了包含“命名空间:”前缀。所以谢谢你让我注意到这个!
                                  • 这是迄今为止我找到的最好的答案之一。似乎没有人提到{% url 'namespace:url_name' %} - 人们回复{%url 'url_name' %}
                                  • 老兄多谢指出——顺便说一句,我觉得Django官方教程可能有错误?他们还省略了命名空间前缀...
                                  • 另外值得一提的是namespace和url_name之间没有空格。就我而言,空间是错误
                                  【解决方案22】:

                                  当你使用 url 标签时,你应该为字符串文字使用引号,例如:

                                  {% url 'products' %}
                                  

                                  目前product 被视为变量,并在错误消息中计算为''

                                  【讨论】:

                                  • 就是这样。我在模板中添加了引号,在 urls.py 中添加了 name='products',它现在可以工作了。谢谢阿拉斯代尔!
                                  • 这也可能是“为什么在升级 django 后提交到同一页面的旧版 django 表单不再工作”这个问题的正确答案。我发表此评论是为了让 Google 可以帮助其他人找到答案。
                                  猜你喜欢
                                  • 2019-06-27
                                  • 2019-04-21
                                  • 2021-07-18
                                  • 2019-04-06
                                  • 2021-04-21
                                  • 1970-01-01
                                  • 2023-02-06
                                  • 2020-12-01
                                  • 2021-05-18
                                  相关资源
                                  最近更新 更多