在管理命令中构建Django绝对URL

3 投票
1 回答
1145 浏览
提问于 2025-04-18 11:42

我们在Django中使用reverse来获取网址,比如说 -

my_url = reverse("name_of_url", kwargs={"param":param, "param2":param2})

在上面的例子中,my_url的格式会是/path1/path2/..

如果我想生成类似于 - www.mysite.com/path1/path2/的链接,我们需要这样做 -

my_url = request.build_absolute_uri(reverse("name_of_url", kwargs={"param":param, "param2":param2}))

这样就能得到想要的格式的网址。但是问题是,我是在一个自定义的管理命令中生成这个网址,而没有办法访问request这个变量。有没有什么办法可以生成格式为 - www.mysite.com/path1/path2/的网址呢?

1 个回答

2

不行,按照我所知道的,从管理命令中是无法做到这一点的。正如你自己发现的那样,你需要用到一些request的信息来构建完整的URL,而当你从控制台启动管理命令时,是没有请求的。

在我的项目中,我通常会在settings里设置一个叫BASE_URL的变量,里面放上你的基础域名,然后用它来构建URL。

你也可以看看网站框架的相关内容:https://docs.djangoproject.com/en/dev/ref/contrib/sites/

撰写回答