在Django中访问BASE_DIR的推荐方法

时间:2014-10-07 08:26:14

标签: python django

我在Django中编写一个自动菜单模块,它将列出BASE_DIR中包含urls.py文件的所有包。为此,我显然需要访问BASE_DIR,但我无法找到这样做的标准方法。我可以这样做:

from myproject import settings

do_stuff(settings.BASE_DIR)

但我宁愿不将其硬编码到myproject,因为此菜单模块也可用于其他应用程序。有更好的解决方案吗?

2 个答案:

答案 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)