django 如何在原始字符串中放置变量,例如 URL 路由器
django how to place variable in a raw string,such as for URL router
我想写一个url,需要的时候可以配置,例如:
url(r'^api/v1/books/',include('article.urls'))
在 settings.py 我设置了一个 APIVERSION = 'api/v1'
我想将 APIVERSION
放入那个 url 中以使其可配置,如何做到这一点,是否有实现该目标的最佳方法?
在urls.py中:
from django.conf import settings
urlpattern = patterns('',
url(settings.APIVERSION, include(
url(r'/books/',include('article.urls'),
)
)
在settings.py中:
APIVERSION = r'^api/v1'
您也可以使用变量避免嵌套包含。
您可以只使用字符串连接,如下所示:
import settings
url(settings.APIVERSION + r'/books', include('article.urls'))
但是,对于一个 API 的多个版本,我猜你会希望它们都同时 posted,这样用户就不会被迫立即升级你什么时候post一个新版本?
在那种情况下,我会使用 include 来引用不同版本并保留所有版本,而不是只指定一个变量。像这样:
urlpatterns = patterns('',
url(r'/api/v1/books', include('api.v1.articles.urls')),
url(r'/api/v2/books', include('api.v2.articles.urls')),
url(r'/api/v3/books', include('api.v3.articles.urls')),
..
)
或者,如果您想在请求处理程序代码中处理映射,您可以将值作为变量提取
urlpatterns = patterns('',
url(r'/api/v(?P<api_version>\d+)/books', 'articles.books.handler')
)
这会在您的处理程序函数中为您提供一个命名变量以供参考。它看起来像这样:
def handler(request, api_version):
... do something here...
@Luca 的回答是正确的,但我会小心破坏您与版本化 URL 的向后兼容性。
我们遇到了类似的情况,最后我们做了一个装饰函数来检查请求路径中 API 的版本。
#supports can be optional and defaults to current version
@check_version(supports="v1")
def view_function(...:
而url会像这样使用正则表达式参数,
^/api/v(?P<version>\d+)/
我想写一个url,需要的时候可以配置,例如:
url(r'^api/v1/books/',include('article.urls'))
在 settings.py 我设置了一个 APIVERSION = 'api/v1'
我想将 APIVERSION
放入那个 url 中以使其可配置,如何做到这一点,是否有实现该目标的最佳方法?
在urls.py中:
from django.conf import settings
urlpattern = patterns('',
url(settings.APIVERSION, include(
url(r'/books/',include('article.urls'),
)
)
在settings.py中:
APIVERSION = r'^api/v1'
您也可以使用变量避免嵌套包含。
您可以只使用字符串连接,如下所示:
import settings
url(settings.APIVERSION + r'/books', include('article.urls'))
但是,对于一个 API 的多个版本,我猜你会希望它们都同时 posted,这样用户就不会被迫立即升级你什么时候post一个新版本?
在那种情况下,我会使用 include 来引用不同版本并保留所有版本,而不是只指定一个变量。像这样:
urlpatterns = patterns('',
url(r'/api/v1/books', include('api.v1.articles.urls')),
url(r'/api/v2/books', include('api.v2.articles.urls')),
url(r'/api/v3/books', include('api.v3.articles.urls')),
..
)
或者,如果您想在请求处理程序代码中处理映射,您可以将值作为变量提取
urlpatterns = patterns('',
url(r'/api/v(?P<api_version>\d+)/books', 'articles.books.handler')
)
这会在您的处理程序函数中为您提供一个命名变量以供参考。它看起来像这样:
def handler(request, api_version):
... do something here...
@Luca 的回答是正确的,但我会小心破坏您与版本化 URL 的向后兼容性。
我们遇到了类似的情况,最后我们做了一个装饰函数来检查请求路径中 API 的版本。
#supports can be optional and defaults to current version
@check_version(supports="v1")
def view_function(...:
而url会像这样使用正则表达式参数,
^/api/v(?P<version>\d+)/