python - Django 错误 "Reverse for ' x' 未找到。 'x' 不是有效的 View 函数或模式名称。”,但 x 是模式名称

标签 python django django-2.0

我一直在使用 Celery 构建 Django 应用程序,并使用 Javascript 通过 URL 轮询本地数据库以获取 Celery 任务的状态。由于某种原因,我的脚本中的 url 模板标记不断收到错误。我做错了什么?

我已经仔细研究了这个问题的每一个变体,它们都归结为坏名字。据我所知,我的名字是正确的,并且我没有使用任何命名空间。

我的 urls.py

from django.conf.urls import url
from django.contrib.auth import views as auth_views
from django.views.generic.base import RedirectView
from django.urls import path, re_path
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

import app.views

from django.conf.urls import include
from django.contrib import admin
admin.autodiscover()

urlpatterns = [
    path('signup/', app.views.signup, name='signup'),
    path('resetpassword/', auth_views.PasswordResetView.as_view(
        template_name='registration/resetpassword.html'), name="resetpassword"),
    path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(
        template_name='registration/password_reset_done.html'), name='password_reset_done'),
    path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(
        template_name='registration/resetpasswordconfirm.html'), name='password_reset_confirm'),
    path('reset/done/', auth_views.PasswordResetCompleteView.as_view(
        template_name='registration/resetpasswordcomplete.html'), name='password_reset_complete'),

    path('graph', app.views.draw_graph, name='graph'),
    path('upload', app.views.upload, name='upload'),
    path('download', app.views.download_zip),
    path('render', app.views.render_pulses, name='render'),
    path('display', app.views.display_images, name='display'),
    path('render_status', app.views.render_status, name='render-status'),
    path('', app.views.gallery, name='gallery'),

    re_path(r'^(?P<slug>[-\w]+)$', app.views.AlbumDetail.as_view(), name='album'),

    # Auth related urls
    re_path(r'accounts/login/$', auth_views.LoginView.as_view(), name='login'),
    re_path(r'accounts/logout/$', app.views.logout, {'next_page': '/', }, name='logout'),

    # Uncomment the next line to enable the admin:
    path('admin/', admin.site.urls),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

handler404 = 'app.views.handler404'

有问题的 Javascript (layout.html)。

<script type="text/javascript">// <![CDATA[
    function get_status() {
        var urlStatus = '{% url "render-status" %}';
        fetch().then(function(response) {
            response.json().then(function(data) {
                if(data.status) {
                    // show render link
                    // don't forget to hide on click
                }
                else {
                    // show loading gif
                }
            });
        });
        get_status();
// ]]></script>

这一切所导致的 View 函数

def render_status(request):
    result = db_API.get_render_status(request.user.id)

    return HttpResponse({'status': result}, content_type='application/json')

最后,回溯

Environment:


Request Method: GET
Request URL: https://www.echobatalog.com/

Django Version: 2.2
Python Version: 3.6.7
Installed Applications:
['app',
 'material',
 'material.admin',
 'imagekit',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sitemaps',
 'django.contrib.sites',
 'django_celery_results']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'whitenoise.middleware.WhiteNoiseMiddleware',
 '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',
 'material.frontend.middleware.SmoothNavigationMiddleware']


Template error:
In template /home/batalog/batalogvenv/Bat_Echolocation_2019/app/templates/layout.html, error at line 3
   Reverse for 'render-status' not found. 'render-status' is not a valid view function or pattern name.
   1 : <script type="text/javascript">// <![CDATA[
   2 :     function get_status() {
   3 :  var urlStatus = ' {% url "render-status" %} ';
   4 :         fetch(urlStatus).then(function(response) {
   5 :              response.json().then(function(data) {
   6 :                 if(data.status) {
   7 :                     // show render link
   8 :                     // don't forget to hide on click
   9 :                 }
   10 :                 else {
   11 :                     // show loading gif
   12 :                 }
   13 :             });


Traceback:

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/batalog/batalogvenv/Bat_Echolocation_2019/app/views.py" in gallery


File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/shortcuts.py" in render
  36.     content = loader.render_to_string(template_name, context, request, using=using)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/loader.py" in render_to_string
  62.     return template.render(context, request)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in render
  171.                     return self._render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/template/defaulttags.py" in render
  443.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/urls/base.py" in reverse
  90.     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))

File "/home/batalog/batalogvenv/lib/python3.6/site-packages/django/urls/resolvers.py" in _reverse_with_prefix
  660.         raise NoReverseMatch(msg)

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

我希望它不断检查我的数据库以了解用户最新作业的状态,但结果却出错了。

最佳答案

事实证明,错误是因为 Gunicorn 加载了早期版本的 urls.py。我所做的所有改变都毫无作用。为了修复它,我必须重新启动守护进程。

关于python - Django 错误 "Reverse for ' x' 未找到。 'x' 不是有效的 View 函数或模式名称。”,但 x 是模式名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55813886/

相关文章:

python - 按外键计数和分组并返回模型django

javascript - onclick ="history.back() don' t 在 Safari 和 IE 中工作

python - Django 2.0.7 - 进行重命名字段迁移时出现语法错误

django - 无法使用 Django ModelForm 验证动态选择

python - 使用 django 2 添加类别的 url

django - 覆盖第三方应用程序的default_manager(Django)

python - 索引的 Cython 内存 View 应该是 Py_ssize_t 类型还是 int 类型?

python - search() 中的 Elasticsearch-py 无法识别 'analyzer' 参数

python - 有没有一种方法可以将我自己的 CLI 开关传递给单元测试文件?

python - 在 Python 中画线对