gpt4 book ai didi

django - 在 Django 中是否有用 View 装饰器替换 urlpatterns 的标准方法?

转载 作者:行者123 更新时间:2023-12-03 14:40:32 25 4
gpt4 key购买 nike

我已经开发了自己的,但它似乎是一件足够好的事情,其他人可能首先想到它并做得更好;)

目标是能够在您的 myapp/views.py 中编写

router = Router(prefix=r'^myapp/')

@router.route(url=r'my/url/here', name="my-great-view")
def myview(request):
return render_to_response("mytemplate.html", {})

然后在 urls.py
urlpatterns += myapp.views.router.get_patterns()

我还内置了其他一些很酷的装饰器东西(@jsonview 用于获取返回的字典并进行 json 响应,@use_template 用于获取返回的字典并将其传递给定义的模板作为上下文......)

似乎这种方式使所有内容都更加本地化并具有可读性。在查看 View 函数时,您不必四处搜索以找到它所属的 url,或者它的“名称”。

我看到了这个 djangosnippet ,但它比我想要的要神奇得多,而且看起来并没有被普遍采用。

如果没有人制定标准解决方案,我是否应该清理我的并提交拉取请求以进行贡献?
  • 这是我目前实现的:magic.py

  • 编辑:
    如果您想要同一 View 的多个网址:
    @router.route(url="my-first-url", kwargs={'foo':'bar'})
    @router.route(url="my-second=url", kwargs={'foo':'baz'})
    def my_view(...): ...

    当然,这不一定是唯一的方法——正常的 urlpatterns 方法有两个优点,但这两种方法并不相互排斥。

    最佳答案

    常规配置我们有一个主网站urls.py .和 urls.py包含名为 urlpatterns 的变量.

    所以我们可以将一些 url_pattern 插入其中。

    应用程序/ View .py

    from django.urls import path as djpath

    URLS = []
    URLS_d = {}


    def route(path=''):
    def wrapper(func):
    path_name = path or func.__name__
    URLS.append(
    djpath(path_name, func)
    )

    ### below is not important ####
    path_func = URLS_d.get(path_name, None)
    if path_func:
    print(path_func, '<>', func)
    raise Exception('THE same path')
    URLS_d[path_name] = func
    ### above is not important ####

    return wrapper

    @route()
    def index(req):
    return HttpResponse('hello')

    网站/urls.py
    from app.views import URLS

    urlpatterns.extend(URLS)

    关于django - 在 Django 中是否有用 View 装饰器替换 urlpatterns 的标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343494/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com