django为单个url设置了multiply函数

时间:2016-02-29 10:17:23

标签: python django

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地址的网页中工作,对吧?!

3 个答案:

答案 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/

更多关于ajax:https://stackoverflow.com/tags/ajax/info