有啥方法可以使用 python 中的注释在 django 中编写 URL

Posted

技术标签:

【中文标题】有啥方法可以使用 python 中的注释在 django 中编写 URL【英文标题】:Is there any way that I can write URL in django using annotations in python有什么方法可以使用 python 中的注释在 django 中编写 URL 【发布时间】:2012-11-18 06:24:30 【问题描述】:

我来自 Java Hibernate 和 Symfony2 背景,我曾经在这样的函数顶部的控制器内编写路由:

/**
 * @Route("/blog")
 */
class PostController extends Controller

我知道它在 Django 中不可用,但有什么方法可以编写一些装饰器等,以便我可以像这样提及 URL:

@URL("/mytest")
class myView():
    pass

【问题讨论】:

你想完成什么? 扩展@Enrico 的评论。您可以以与 Django 几乎相同的方式将 Flask 用作 wsgi 代码,因此部署实际上并没有太大的不同,并且您可以获得您所追求的语法。 【参考方案1】:

虽然它会非常不雅,但您可以尝试这样的事情:

project/
    decorators.py
    views.py
    urls.py

# decorators.py
from django.conf import settings
from django.utils.importlib import import_module
from django.conf.urls.defaults import patterns, url

def URL(path):
    path = r'^%s$' % path[1:]  # Add delimiters and remove opening slash
    def decorator(view):
        urls = import_module(settings.ROOT_URLCONF)
        urls.urlpatterns += patterns('', url(path, view))
        return view
    return decorator

# views.py
from .decorators import URL

@URL('/')
def home(request):
    # your view

@URL('/products')
def products(request):
    # your view


# urls.py
from django.conf.urls import patterns

from . import views  # import the modules with your views

urlpatterns = patterns('',)  # create an empty url dispatcher to append to

并确保在处理 url 之前导入包含此装饰器的每个文件(例如,通过将它们导入 urls 文件中)。

【讨论】:

谢谢哥们,我会试试的。 1.我必须在哪个文件中编写该代码 2.假设我在 view.py 中使用它,我该如何导入它。能给我举个例子吗 edit 反映了这些答案:1. 将此代码写入任何可以导入的文件中,我将其放在decorators.py 2. 像往常一样导入模块,我做了一个相对导入views.py 我收到此错误AttributeError: 'Settings' object has no attribute 'ROOT_URL_CONF' 对不起,应该是ROOT_URLCONF 为什么这被认为是 undjangonic?

以上是关于有啥方法可以使用 python 中的注释在 django 中编写 URL的主要内容,如果未能解决你的问题,请参考以下文章

Python3 的“函数注释”有啥好的用途?

有啥方法可以通过 Python 中的 id 获取对象的大小?

在python中有啥比较高效方法可以转换list中的str类型为float?

python中列表和元组之间有啥区别?

Python 3.8中的list和List有啥区别[重复]

Python中的sorted()有啥神奇的方法吗?