2016-02-29 2 views
3

В views.py (сотовый телефон и дата-время) есть 2 функции.django set multiply function for single url

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> 

(Здесь, так как функция функции мобильного телефона была установлена ​​для системы 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

версии Джанго вы используете? – maazza

+0

Django Версия: 1.8.2 и версия Python: 3.4.3 – niloofar

+0

вам нужно сделать одно представление, которое даст вам оба значения, один запрос приведет к одному виду. Просто добавьте 'now': datetime.now() в контекст в виде сотового телефона. – krs

ответ

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. 
] 
+0

Это нормально, но суровый не может управлять множеством функций для сбора. – niloofar

4

Я думаю, вы используете The built in now filter для печати текущего времени и даты и спутать его для переменной контекста.

Вы не можете иметь два вида ответа на один запрос, это не так, как работает django. Вы должны сделать одно представление, которое вытаскивает все данные, необходимые шаблону, и передает их на ответ. Вы все еще можете иметь отдельные функции для получения контекста, а затем просто собирать их в представлении.

+0

Хорошо, позвольте мне объяснить, что я ищу. Я хочу создать веб-сайт с одной веб-страницей (простой веб-сайт с единственной страницей и единственным URL-адресом, который должен быть '/ system'. Каждая функция должна быть настроена на работу с другим URL-адресом, поэтому мне нужно определить многие URL-адреса? И это означает, что я должен вводить разные URL-адреса для разных процессов? – niloofar

+0

@niloofar вы можете использовать одну функцию для всех своих процессов или использовать представления на основе классов для простого управления различными процессами для примера см. Ответ Зии – maazza

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