首页 > 解决方案 > 如何从 django 中另一个 url 的视图函数中知道 url 路径?

问题描述

我有一组网址:

/home/
/register/
/login/
/puzzle/<pk>

所有前 3 个 url 都可以向最后一个 url 发出请求。

/puzzle/<pk>是否可以从附加的视图函数中知道哪些 url 正在调用它?

编辑

所以问题是它是一个益智游戏,每个用户都有一个级别。如果他只有完成某个级别,那么他就可以进入下一个级别。因此,如果用户完成了第 3 级,我将始终向他显示带有 url 的 html 页面/puzzle/4

流程是:

用户注册。他的等级是0。一旦他注册,他将被重定向到puzzle/1/

用户登录。如果他完成了级别x,一旦他登录,他将被重定向到/puzzle/x+1

我已经处理了这两种类型。

但问题是,假设用户在页面中/puzzle/1/。现在如果他手动将 url/puzzle/2/从附加到的视图函数中更改为/puzzle/<pk>/,我该如何处理上述情况?

标签: djangourl

解决方案


我相信你正在寻找request.resolver_match. 您可以访问视图名称request.resolver_match.view_name

编辑:

如果我正确理解你的模型,你需要一些类似下面的逻辑。您需要调整视图名称和参数reverse

def view(request, puzzle_level):
    if puzzle_level != request.user.level_completed + 1:
        return redirect(
            reverse(
                'puzzle_view_name',
                kwargs={'puzzle_level': request.user.level_completed + 1},
            )
        )
     ...

推荐阅读