【问题标题】:Outputing text from urls.py in Django在 Django 中从 urls.py 输出文本
【发布时间】:2015-10-10 21:24:12
【问题描述】:

有什么方法可以简单地从 urls.py 输出文本(不是 HTML)而不是调用函数(在 views.py 或其他方式中)?

urlpatterns = patterns('',
    url(r'^$', "Hello World"),
)

【问题讨论】:

  • AFAIK 否,但您可以从视图中输出文本。
  • 我想你可以使用例如lambda *a, **k: 'Hello World',但你到底想做什么?
  • 这只是我正在进行的一个小实验。没有什么值得生产的

标签: python django django-urls


【解决方案1】:

不,肯定的。 url 必须将模式映射到可调用对象,并且此可调用对象必须接受 HttpRequest 作为第一个参数并返回 HttpResponse

您可以做的更接近的事情是将模式映射到 lambda(匿名函数),即:

from django.http import HttpResponse

urlpatterns = patterns('',
    url(r'^$', lambda request: HttpResponse("Hello World", content_type="text/plain")),
)

但我绝对不会认为这是一种好的做法。

【讨论】:

  • 我发现这也很有效url(r'^$', lambda request: HttpResponse("Hello World")),,这很好。不是 python 专业人士可以使语句更紧凑吗?
  • 你可以将它包装在一个辅助函数中。请参阅我的更新答案。
【解决方案2】:

url 函数接受一个可调用对象,类似于

rlpatterns = patterns('',
    url(r'^$', lambda req:HttpResponse("Hello World")),
)

会工作的。这样做实际上并没有什么好处,除了让你的 urls.py 更难阅读。

首先,你应该考虑你是否真的想要这个。如果需要它(我从来没有需要这样做,并且这些年来我编写了相当多的 Django 应用程序),你可以将它包装成更紧凑的东西,例如

请注意,将字符串直接传递给url 会将其视为方法名称。

def static_text(s):
    return lambda req:HttpResponse(s)

rlpatterns = patterns('',
    url(r'^$', static_text("Hello World")),
)

【讨论】:

【解决方案3】:

对于 Django 2.2 及以上版本

path('', lambda request: HttpResponse("Hello World", content_type="text/plain"), name='home'),

【讨论】:

    猜你喜欢
    • 2012-04-25
    • 2011-06-17
    • 1970-01-01
    • 2022-11-13
    • 2014-08-01
    • 2012-07-11
    • 2015-11-12
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多