【问题标题】:adding new url patterns to urls.py on the fly in django在 django 中动态添加新的 url 模式到 urls.py
【发布时间】:2014-11-23 14:09:39
【问题描述】:

我正在尝试向项目 urls.py(不是应用程序 url)动态添加新的 url 模式。我在 stackoverflow 上找不到任何关于此的内容!

编辑: 我正在编写一个简单的脚手架应用程序。对于给定的模型,我为应用程序动态创建表单、视图、模板和 urls.py。最后就是自动将应用的 urls.py 添加(附加)到项目的 urls.py 中。

【问题讨论】:

  • 您能否扩展您的问题,您到底想做什么?
  • 最好通过声明通用正则表达式来做到这一点,这将匹配您新的 url 模式。
  • 我正在编写一个简单的脚手架应用程序。对于给定的模型,我为应用程序动态创建表单、视图、模板和 urls.py。最后就是自动将app的urls.py添加(attach)到项目的urls.py中。
  • 您要求的解决方案是一个非常糟糕的主意;最好简单地创建一个模式/a/<app_name>/<model_name>/add/a/<app_name>/<model_name>/delete等。
  • Burhan 我认为你没有理解我的问题!

标签: django django-urls


【解决方案1】:

Django 路由不允许这样的动态,因为路由表在应用程序启动时构建一次并且从不刷新。即使它是可刷新的,那么您也应该使用数据库、套接字、Redis pubsub 或此类机制在不同的服务器进程之间传达路由表更改,并且您将弯曲 Django 框架以实现它不适合做的事情。

相反,正如建议的那样,您需要一个通用的正则表达式挂钩来匹配您想要“动态”的所有 URL。然后,在这个通用 URL 的视图代码中,您可以根据完整的输入 URL 和可用数据(例如来自数据库)进行自己的路由。如果您愿意,您甚至可以在视图中构建自己的Django URL resolver,尽管这可能不是一个没有问题的方法。

通常,解决这种情况的更好方法称为遍历。 Django 本身不支持遍历,but other Python web frameworks like Pyramid support traversal

【讨论】:

  • 我将应用程序作为自定义 django-admin 命令 (docs.djangoproject.com/en/1.7/howto/custom-management-commands) 运行,因此服务器实际上并未运行。我认为最好的选择是尝试找到 urls.py 文件并将新的 url 写入其中。!!!像这样 open('../../urls.py') as f, f.write(new_urls)
  • Python 无法自动重新加载此文件。您需要在每次更改时重新启动服务器。我建议按照建议采取不同的方法,因为重写 URL 没有意义。
  • 这就是我所说的,而我正在重写服务器未运行的 url...所以我认为它会没事的。脚手架过程完成后必须重新启动服务器...
猜你喜欢
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 2013-03-20
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多