【问题标题】:Reverse for '' with arguments '('',)' not found未找到带有参数 '('',)' 的 '' 的反向
【发布时间】:2021-11-09 10:43:28
【问题描述】:

我正在尝试实现一种方法来更改我的应用上保存的一些设置,用户应该能够相应地查看和更改这些设置。

但是,在尝试加载“SettingsHome”页面时收到上述错误。

请看下面的代码和完整的错误信息:

错误:

NoReverseMatch at /settings Reverse for 'viewSettings' 带参数 '('',)' 未找到。尝试了 1 种模式: ['accConnect/setting/(?P[0-9]+)$'] 请求方法:GET 请求 URL:http://localhost:8000/settings Django 版本:3.2 异常类型:NoReverseMatch 异常值:Reverse for 未找到带有参数 '('',)' 的 'viewSettings'。尝试了 1 种模式: ['accConnect/setting/(?P[0-9]+)$'] 异常 位置:C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\lib\site-packages\django\urls\resolvers.py, 第 694 行,在 _reverse_with_prefix Python 中 可执行文件:C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\python.exe Python 版本:3.9.4 Python 路径:
['C:\Users\KylePOG\Documents\GMA Programming\accConnect', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\python39.zip', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\DLLs', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\lib', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39', 'C:\Users\KylePOG\AppData\Local\Programs\Python\Python39\lib\site-packages'] 服务器时间:2021 年 9 月 14 日星期二 08:30:03 +0000 模板期间出错 在模板 C:\Users\KylePOG\Documents\GMA 中渲染 Programming\accConnect\main\templates\main\base.html,第 7 行出错

未找到带有参数“('',)' 的“viewSettings”的反向操作。 1 尝试的模式:['accConnect/setting/(?P[0-9]+)$'] 1 2 3 4 5 /* 侧边栏菜单 / 6 .sidenav { 7
高度:100%; /
全高:如果你想要“自动”高度,请删除它/ 8 宽度:160px; / 设置侧边栏的宽度/ 9
位置:固定; /
固定侧边栏(滚动时保持原位)/ 10
z-index:1; /
保持领先 / 11 top: 0; / 保持领先/ 12 左:0; 13 背景色:#111; / 黑色 / 14
溢出-x:隐藏; /
禁用水平滚动 */ 15
填充顶部:20px; 16 } 17

代码

Views.py:

def settingsHome(request):

    allClass = SettingsClass.objects.all().order_by('Complex')
    return render(request, 'main/settingsHome.html' , {'allClass' : allClass})

def viewSettings(request,  settings_pk):
    setting = get_object_or_404(SettingClass, pk=settings_pk)
    if request.method == 'GET':
        form = SettingForm(instance=setting)
        return render(request, 'meter_readings/viewSettings.html', {'setting': setting, 'form':form})
    else:
        try:
            form =  SettingForm(request.POST, instance=setting)
            form.save()
            return redirect('settingsHome')
        except ValueError:
            return render(request, 'meter_readings/viewSettings.html', {'setting': setting, 'form':form, 'error':'Bad info'})

viewSettings.html:

{% extends "main/base.html"%}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous">

{% block content %}

{{ error }}

 {{ setting.Complex }}

<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Update</button>
</form>

{% endblock %}

settingHome.html:

{% extends "main/base.html"%}


{% block content %}
{% for entry in allClass %}

<div class="container">
  <div class="row mx-lg-n5">
    <a href="{% url 'viewSettings' settings.id %}">»  {{ entry.Complex }}</a>
  </div>
</div>

{% endfor %}

<br>

<a href="{% url 'newSetting' %}" class="btn btn-primary">➕ Add New Setting</a>

{% endblock %}

网址.py:

#Settings
path('settings', views.settingsHome , name='settingsHome'),
path('ns' , views.newSetting , name='newSetting'),
path('accConnect/setting/<int:settings_pk>', views.viewSettings, name='viewSettings' ),

我认为 'pk' 实现有问题,但我就是想不通。

如果有人在此代码中发现任何错误,请提供帮助。

【问题讨论】:

  • 在settinghome.html中注释掉这一行» {{ entry.Complex }},它有一个未传递给呈现 settinghome.html 模板的 settingsHome 视图的 pk

标签: python html django django-models django-forms


【解决方案1】:

这是你settinghome.html中的问题

 <a href="{% url 'viewSettings' settings.id %}">» {{ entry.Complex }}</a>,

呈现 settinghome.html 的视图不期望您在 ViewSetting url 上调用的 pk。

更新

使用entry.id 而不是settings.id

{% for entry in allClass %}

<div class="container">
  <div class="row mx-lg-n5">
    <a href="{% url 'viewSettings' entry.id %}">»  {{ 
 entry.Complex }}</a> <!--replace setting.id with entry.id -->
  </div>
</div>
{% endfor %}

【讨论】:

  • 我已经删除了那个代码,它现在加载了。但我仍然需要这个链接到“viewSetting”页面。如何在 href 中正确调用“viewSetting”页面?
  • 我已经更新了我的答案,包括一个可能的解决方案
猜你喜欢
  • 2019-09-14
  • 2021-03-01
  • 2021-03-13
  • 2019-04-21
  • 2020-05-11
  • 2010-12-22
  • 2013-12-07
  • 2021-04-13
相关资源
最近更新 更多