我在Django中编写一个自动菜单模块,它将列出BASE_DIR中包含urls.py文件的所有包。为此,我显然需要访问BASE_DIR,但我无法找到这样做的标准方法。我可以这样做:
from myproject import settings
do_stuff(settings.BASE_DIR)
但我宁愿不将其硬编码到myproject,因为此菜单模块也可用于其他应用程序。有更好的解决方案吗?
答案 0 :(得分:15)
这不是关于BASE_DIR的问题,而是关于导入设置的问题。在任何情况下,您提出的解决方案都不是有效的Python:导入不会使用类似的文件路径。
在Django中导入设置的标准和完整记录方式是:
from django.conf import settings
在任何Django项目中,这将始终有效,并允许您访问任何设置。
答案 1 :(得分:0)
例如,在一个views.py文件中,我们可以执行以下操作来使用BASE_DIR的值
**Error: Must extract column with a single valid subscript.
x Subscript `var` has size 1006 but must be size 1.**
Traceback:
1. multi_label_binariser(utils_df, skills_feature, sep = ",", as_integer = FALSE)
2. data %>% dplyr::pull({
. {
. feature
. }
. }) %>% stringr::str_split(sep) %>% base::unlist() %>% base::unique() %>%
. base::sort()
3. base::sort(.)
4. base::unique(.)
5. base::unlist(.)
6. stringr::str_split(., sep)
7. stri_split_regex(string, pattern, n = n, simplify = simplify,
. opts_regex = opts(pattern))
8. dplyr::pull(., {
. {
. feature
. }
. })
9. pull.data.frame(., {
. {
. feature
. }
. })
10. tidyselect::vars_pull(names(.data), !!enquo(var))
11. pull_as_location2(loc, n, vars)
12. with_subscript_errors(type = "pull", {
. i <- vctrs::vec_as_subscript2(i, arg = "var", logical = "error")
. if (is.numeric(i)) {
. vctrs::num_as_location2(i, n = n, negative = "ignore",
. arg = "var")
. }
. else {
. vctrs::vec_as_location2(i, n = n, names = names, arg = "var")
. }
. })
13. tryCatch(instrument_base_errors(expr), vctrs_error_subscript = function(cnd) {
. cnd$subscript_action <- subscript_action(type)
. cnd$subscript_elt <- "column"
. cnd_signal(cnd)
. })
14. tryCatchList(expr, classes, parentenv, handlers)
15. tryCatchOne(expr, names, parentenv, handlers[[1L]])
16. value[[3L]](cond)
17. cnd_signal(cnd)
18. rlang:::signal_abort(x)