【发布时间】:2018-01-06 09:38:34
【问题描述】:
我有一个函数可以运行每个视图来纠正蛞蝓。 例如,如果 slug 是 /12-post-about-stuff 并且用户输入 /12-post-abot_stof 他们将被正确重定向。问题是不同的视图有不同的 url 模式,例如:
/posts/post_slug/
...
/posts/post_slug/comments/new
如何编写一个函数,通过根据当前 url 修复 slug 名称来重定向?
编辑:我正在使用 board_name 和 pk 参数对每个视图应用装饰器。我不知道的是如何动态返回新的url,因为每个视图的url格式都不一样。
def correct_board_url_name(func):
def wrapper(request, board_slug):
try:
pk = int(board_slug.split('-')[0])
board = Board.objects.get(pk=pk)
if (board.slug != board_slug):
# This does not always work depending on what is entered
return redirect(request.get_full_path().replace(board_slug, board.slug, 1))
else:
return func(request, board_slug)
except:
raise Http404('')
return wrapper
【问题讨论】:
-
你能详细说明一下吗?
-
您打算如何将错误的 url 与正确的 url 匹配?它是基于PK 12的吗?您使用的是基于类还是基于函数的视图?
-
基于类的视图,为清晰起见进行了编辑