2015-07-21 39 views
1

有沒有什麼辦法可以簡單地從urls.py輸出文本(不是HTML)而不是調用一個函數(在views.py或其他文件中)?從Django的urls.py輸出文本

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

AFAIK否,但可以從視圖中輸出文本。 – cezar

+0

我想你可以使用例如'lambda * a,** k:'Hello World'',但是你究竟想要做什麼? – jonrsharpe

+0

這只是我正在做的一個小實驗。沒有生產值得 – Sevenearths

回答

5

不,確定無疑。 A url必須將模式映射到可調用對象,並且此可調用對象必須接受HttpRequest作爲第一個參數並返回HttpResponse

你可以做的更近的事情將是映射模式拉姆達(匿名函數),即:

from django.http import HttpResponse 

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

但我不definitly認爲這是很好的做法。

+0

我發現這個工程以及'url(r'^ $',lambda請求:HttpResponse(「Hello World」)),'這很好。不是一個Python專家可以使聲明更緊湊? – Sevenearths

+0

你可以把它包裝在一個輔助函數中。看到我更新的答案。 – Krumelur

1

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")), 
) 
+0

什麼是lambda? – Sevenearths

+0

創建lambda函數(http://www.secnetix.de/olli/Python/lambda_functions.hawk) – Krumelur

+0

Ahhh。所以url函數的第二部分必須是一個函數,因此你不能傳遞一個字符串給它。疑難雜症 – Sevenearths