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

时间:2014-11-09 22:57:05

标签: django

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

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

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

但是,由于我使用变量,我似乎无法接受urlconf接受我的网址。 用于列出主板的模板摘录在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 个答案:

答案 0 :(得分: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+)