[英]Keep HTML formatting when passing variable from Django template to view
[英]Django - passing variable from function view into html template
下午好,我有一個問題,我不知道該怎么做。 我正在使用第三方metar
獲取數據,我將其存儲到元變量中並將其作為參數傳遞。 但是它不起作用。 任何幫助將不勝感激。 謝謝。
視圖.py
from urllib.request import Request, urlopen
from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView
from django.template.response import TemplateResponse
# Create your views here.
class DashboardView(TemplateView):
template_name = "index.html"
def index(request, template_name="index.html"):
headers = {
'Authorization': 'my_private_api'
}
args={}
request = Request('https://avwx.rest/api/metar/KJFK', headers=headers)
response_body = urlopen(request).read()
args['metar'] = response_body
return TemplateResponse(request,template_name,args)
索引.html
{%block content %}
<div>
<h1>Metary</h1>
<p>{{ metar }}</p>
</div>
{%endblock content%}
網址.py
from django.urls import path
from . import views
from dashboard.views import DashboardView
urlpatterns = [
path('', DashboardView.as_view()),
]
您可以使用渲染 function 來簡化此操作。
例如
from django.shortcuts import render
def index(request, template_name="index.html"):
return render(request, template_name, {'metar': 'Hello world'})
查看您的代碼后,我知道您有兩個視圖作為DashboardView
,這是一個模板視圖和另一個index
,它是基於 function 的視圖(並且您配置不正確)。 在 Urls 中,您已將DashboardView
配置為視圖處理程序,而您的實際 api 代碼位於index
中,這就是它不起作用的原因。 以下解決方案基於基於 function 的視圖,這可能會有所幫助。
視圖.py
from django.shortcuts import render
from urllib.request import Request, urlopen
def index(request):
headers = {'Authorization': 'my_private_api'}
request = Request('https://avwx.rest/api/metar/KJFK', headers=headers)
response_body = urlopen(request).read()
context = {
'metar':response_body
}
return render(request,'index.html',context=context)
模板.html
{%block content %}
<div>
<h1>Metary</h1>
<p>{{ metar }}</p>
</div>
{%endblock content%}
網址.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index ),
]
我將根據 django 回答您的問題,您將必須弄清楚如何從他們的文檔中獲取來自外部 api 的請求。
根據 django 文檔: 模板視圖的方法流程圖是
現在你正在使用
def index(request, template_name="index.html"):
headers = {'Authorization': 'my_private_api'}
args={}
request = Request('https://avwx.rest/api/metar/KJFK', headers=headers)
response_body = urlopen(request).read()
args['metar'] = response_body
return TemplateResponse(request,template_name,args)
這是行不通的,因為這個def index(...
根本沒有執行。所以你的上下文metar
中什么都沒有
因此將您的代碼更改為:
class DashboardView(TemplateView):
template_name = "index.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
#headers = {'Authorization': 'my_private_api'}
#request = Request('https://avwx.rest/api/metar/KJFK',headers=headers)
#response_body = urlopen(request).read()
context['metar'] = 'some information'
return context
會給你metar
作為模板中'some information'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.