views.py中有2个功能,(手机和日期时间)。
views.py:
from django.http import *
from django.shortcuts import render
from django.http import HttpResponseRedirect
import pymysql
def cellphone(request):
from bs4 import BeautifulSoup
from urllib.request import urlopen
url ='http://www.digikala.com/Product/DKP-95906/Huawei-Mate-S-Dual-SIM-64GB-Mobile-Phone/'
data = urlopen(url)
soup = BeautifulSoup(data, 'html.parser')
price = soup.body.find('span', attrs={'id':'frmLblPayablePriceAmount'}).text
return render(request, 'system.html', {'price': price})
def datetime(request):
import datetime
now = datetime.datetime.now()
return render(request, 'system.html', {'now': now})
system.html:
<html>
<head>
<style>
body {
padding: 0px;
margin: 0px;
background: #3A3F44;
}
</style>
</head>
<body>
<div style="height: 50px;background:#16A085;">
* {{ price }} * {{ now }} *
</div>
</body>
</html>
(这里因为为 system url设置了手机功能功能,日期时功能将不起作用。)
urls.py:
from django.conf.urls import include, url
from system.views import cellphone, datetime
urlpatterns = [
url(r'^system/', cellphone),
url(r'^system/', datetime),
我想在页面加载时,两个功能都可以工作,我在屏幕上看到价格和日期时间。怎么可能?
=============================================== ==========
是否可以这样做?
我创建了datetime.html
文件:
<b> {{ now }} </b>
然后只更改了这部分
return render(request, 'datetime.html', {'now': now})
来自views.py的。 接下来改变了system.html:
* {{ price }} * {% include 'datetime.html' %} *
但接下来我该怎么办?我可以在urls.py中做些什么改变? 它有用吗?两个单独的功能都在一个带有一个URL地址的网页中工作,对吧?!
答案 0 :(得分:4)
我的猜测是你使用The built in now filter来打印当前时间和日期,并将其误认为是上下文变量。
您不能让两个视图响应单个请求,这不是django的工作方式。您必须创建一个视图,以提取模板所需的所有数据并将其呈现给响应。您仍然可以使用单独的函数来派生上下文,然后只在视图中收集它们。
答案 1 :(得分:1)
也许您会对日期时间做些什么,您可以将时间存储在手机功能的日期库中。
views.py
import datetime
from urllib.request import urlopen
import pymysql
from bs4 import BeautifulSoup
from django.shortcuts import render
from django.http import HttpResponseRedirect
def cellphone(request):
url ='http://www.digikala.com/Product/DKP-95906/Huawei-Mate-S-Dual-SIM-64GB-Mobile-Phone/'
data = urlopen(url)
soup = BeautifulSoup(data, 'html.parser')
price = soup.body.find('span', attrs={'id':'frmLblPayablePriceAmount'}).text
now = datetime.datetime.now()
return render(request, 'system.html', {'price': price, 'now': now})
urls.py
from django.conf.urls import include, url
from system.views import cellphone
urlpatterns = [
url(r'^system/$', cellphone), # Django would only call the first match.
# And the '$' at the end of regex is important.
]
答案 2 :(得分:1)
您只需使用一个网页即可使用ajax加载网页的小部分内容。
您可以为每个子集使用一个URL,但您需要使用javascript / jQuery,例如:
$(document).ready(function(){
$("#datetime_content").load("/system/datetime");
});
在您的日期时间功能中使用此功能(与您的问题中的模板相同)
return render(request, 'datetime.html', {'now': now})
,这在url.py
中urlpatterns = [
url(r'^system/', cellphone),
url(r'^system/datetime', datetime),
]
你当然可以对cellphone
功能/视图
但我还是会推荐基于类的视图: https://docs.djangoproject.com/en/1.8/topics/class-based-views/