NoReverseMatch:找不到带有参数'('',)'的'add_solution'的反向。尝试了1个模式:['share /(?P <pk> \\ d +)/ add_solution / $']

时间:2018-10-09 21:52:50

标签: django

重点是,我有练习和解决方案 当我单击execsise时,有添加解决方案按钮,但是... 我收到此错误:

django.urls.exceptions.NoReverseMatch: Reverse for 'add_solution' with arguments '('',)' not found. 1 pattern(s) tried: ['share/(?P<pk>\\d+)/add_solution/$']

我的urls.py:

re_path(r'^(?P<pk>\d+)/add_solution/$', views.add_solution, name='add_solution'),

我的观点:

def add_solution(request, pk = None):

    if request.method == "POST":
        form = ShareForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('Share:show_code')
    else:
        form = ShareForm()
    return render(request, 'share/add_solution.html', {'form': form})

我的模板:

<form method="post" action="{% url 'Share:add_solution' pk%}">
                        {% csrf_token %}
                       <button class="btn btn-success px-5">Add solution</button>
 </form>

如果我从网址中删除(?P \ d +),ir会起作用,但是我需要手动指定练习。但是我想从URL获取运动ID,并在添加解决方案时自动填充运动填充。 预先谢谢你。

1 个答案:

答案 0 :(得分:1)

Reverse for 'add_solution' with arguments '('',)'

模板上下文中的pk变量为空字符串''或未定义。它应该是一个数字。

<form method="post" action="{% url 'Share:add_solution' pk %}">