首页 文章

Django泛型CBV将变量从模板传递到视图

提问于
浏览
0

我一直在努力解决这个问题,尽管所有其他问题/答案我都想不出来 . 我可以用FBV这样做,但我正在尝试用CBV做 .

我正在尝试在网页上创建一个电路板列表,点击每个电路板会将您带到电路板的详细信息 . 例如,在简单的html中:

<a href="board1.html">board 1</a>
<a href="board2.html">board 2</a>

但是,我似乎无法让urlconf接受我的url,因为我正在使用变量 . 我的模板用于列出电路板的摘录在list_boards.html中:

{% for board in all_my_boards %}
   <a href="{% url 'leaderboard:view_board' board.id %}">{{ board.title }}</a>
   <br>
{% endfor %}

urlconf是:

url(r'^view_board/?P(<board_id>\d+)/$', ViewBoardDetails.as_view(), name='view_board'),

并包含在主urlconf中:

url(r'^leaderboard/', include('leaderboard.urls', namespace='leaderboard')),

电路板详细信息在视图中显示为ViewBoardDetails:

class ViewBoardDetails(DetailView):
    model = LeaderBoard
    template_name = 'leaderboard/view_board.html'

    def get(self, request, *args, **kwargs):
        my_board_id = self.args[0]
        return render(request, 'leaderboard/view_board', {'my_board_id':my_board_id})

我得到的错误信息是:

Reverse for 'view_board' with arguments '(1,)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'leaderboard/view_board/?P(<board_id>\\d+)/$']

1 回答

  • 1

    忽略我对关键字参数的评论 - 这不应该有所作为 .

    你的网址有误 . 正则表达式组 board_id 的括号位于错误的位置 . 它应该是:

    url(r'^view_board/(?P<board_id>\d+)/$', ViewBoardDetails.as_view(), name='view_board'),
    

    很难发现,但 ?P(<board_id>\d+) 应该是 (?P<board_id>\d+)

相关问题