我一直在努力解决这个问题,尽管所有其他问题/答案我都无法解决。我可以用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+)/$']
答案 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+)