2016-04-19 19 views
0

Ich versuche, Daten von django views.py Datei an angularjs controller.js Datei senden, aber nicht senden können. Das Problem ist, dass ich keine Daten von der Sichten-Datei zum Controller senden kann. Und wenn ich meinen Code ausführe, ändert sich der Wert {% steps%} nicht zu dem Wert, den ich in der views-Datei zugewiesen habe. Ich möchte Django Rest Framework dafür nicht verwenden. Gibt es einen anderen Weg, dies zu erreichen? Wenn ja, dann hilf mir bitte.Senden von Daten von Django-Ansichten an angularjs Controller

views.py:

from django.shortcuts import render 
from django.conf import settings 
from user_data.models import GetData 
import json 

def home(req): 
    return render(req, 'index.html') 

def userData(req): 
    if req.method == 'GET': 
     user_data = GetData().getAllData() 
     context_dict = {'user_data1' : json.dumps(user_data[0]), 
         'user_data2' : json.dumps(user_data[1]), 
         'user_steps' : json.dumps(2000)} 

     return render(req, 'index.html', context_dict) 

controller.js:

'use strict'; 

MetronicApp.controller('DashboardController', function($rootScope, $scope, $http, $timeout) { 
    $scope.$on('$viewContentLoaded', function() { 
     // initialize core components 
     Metronic.initAjax(); 
    }); 
    $scope.steps = {{user_steps|safe}}; 
}); 

html Datei: -

<div ng-controller="DashboardController" class="margin-top-10"> 
    <div class="row "> 
       <div class="col-md-12 col-sm-12"> 
        <div class="portlet light "> 
          <div class="portlet-title"> 
           <div class="caption"> 
            <i class="icon-cursor font-purple-intense hide"></i> 
            <span class="caption-subject font-purple-intense bold uppercase">Tracker Report</span> 
           </div> 
           <div class="actions"> 
            <a href="javascript:;" class="btn btn-sm btn-circle btn-default easy-pie-chart-reload"> 
            <i class="fa fa-repeat"></i> Reload </a> 
           </div> 
          </div> 
          <div class="portlet-body"> 
           <div class="row"> 
           <div class="col-md-3"> 
            <div class="easy-pie-chart"> 
             <div class="number transactions" data-percent="55"> 
              <span>{$ steps $}</span> 
             </div> 
             <!-- <a class="title" href="#"> --> 
             Steps <!-- <i class="icon-arrow-right"></i> --> 
             </a> 
            </div> 
           </div> 
           <div class="margin-bottom-10 visible-sm"> 
           </div> 
           <div class="col-md-3"> 
            <div class="easy-pie-chart"> 
             <div class="number visits" data-percent="85"> 
              <span> 
              +85 </span> 
              % 
             </div> 
             <!-- <a class="title" href="#"> --> 
             Sleep<!-- <i class="icon-arrow-right"></i> --> 
             </a> 
            </div> 
           </div> 
           <div class="margin-bottom-10 visible-sm"> 
           </div> 
           <div class="col-md-3"> 
            <div class="easy-pie-chart"> 
             <div class="number bounce" data-percent="46"> 
              <span> 
              +46 </span> 
              % 
             </div> 
             <!-- <a class="title" href="#"> --> 
             Calories <!-- <i class="icon-arrow-right"></i> --> 
             </a> 
            </div> 
           </div> 
           <div class="margin-bottom-10 visible-sm"> 
           </div> 
           <div class="col-md-3"> 
            <div class="easy-pie-chart"> 
             <div class="number bounce" data-percent="32"> 
              <span> 
              +32 </span> 
              % 
             </div> 
             </a> 
            </div> 
           </div> 

          </div> 
          </div> 
         </div> 
       </div> 
</div> 
+2

Sie haben uns nicht genügend Informationen gegeben, um Ihnen zu helfen. Was stimmt nicht mit dem Code, den du gepostet hast? Was geschieht? Was willst du stattdessen tun? Welche Fehler siehst du? –

+0

@DanielRoseman das Problem ist, dass ich keine Daten von Sichten Datei an den Controller senden kann. Und wenn ich meinen Code ausführe, ändert sich der Wert {% steps%} nicht zu dem Wert, den ich in der views-Datei zugewiesen habe. – User0706

+0

Sie versuchen, Django-Vorlagensyntax in einer js-Datei zu verwenden, aber django macht die Javascript-Dateien nicht – Sayse

Antwort

2

Dies ist im Grunde, was Ich habe es in einem meiner großen Django-Projekte gemacht (aber ich bin mir nicht 100% sicher, ob dies oder das ist nicht das, was Sie suchen, als Antwort). Also, anstelle von views.py habe ich eine custom.py-Datei erstellt, in der ich benutzerdefinierte APIs anlege und sie (unter Verwendung von urlpatterns) in der urls.py meiner django-App anrufe. Und ich habe noch eine Reihe von APIs, für die ich das Django-Rest-Framework verwende, für das ich Viewsets statt einfacher Views mache. Nur für den Fall, dass Sie interessiert sind, möchten Sie vielleicht lesen this SO link.

Da Sie jedoch ausdrücklich erwähnt haben, dass Sie keine django Rest-Frameworks verwenden möchten, gebe ich Ihnen ein Beispiel für die custom.py-Datei, wie oben erwähnt. Nachfolgend finden Sie eine Probe eines API in einer custom.py sieht

@api_view(['GET']) 
def get_user_details(request): 
    """ 
    API View that gives a user detail 

    --- 

    parameters: 
     - name: email 
      description: The email of the user based on which his/her information has been extracted 
      required: true 
      type: string 

    responseMessages: 
     - code: 400 
      message: Email required as GET parameters. 
      message: User not found. 
     - code: 200 
      mesage: User details sent successfully 

    consumes: 
     - application/json 
     - application/xml 
    produces: 
     - application/json 
     - application/xml 

    """ 

    email = request.query_params.get('email', None) 

    if email is None: 
     return HttpResponseBadRequest("Email required as GET parameters.") 

    try: 
     user = User.objects.get(username=email) 
    except User.DoesNotExist: 
     return HttpResponseBadRequest("User not found.") 

    response_data = {'id': user.id, 'first_name': user.first_name, 'last_name': user.last_name,} 

    return HttpResponse(json.dumps(response_data), content_type="application/json") 

Und anschließend definiert finden, wie die urls.py in meiner django App:

urlpatterns = router.urls 

urlpatterns = urlpatterns + [ 
    url(r'get_user_details/', get_user_details), 
] 

Mein Controller etwas aussehen würde wie folgt aus:

CheckEmail : function (current) { 
    return $http({ 
     method: 'GET', 
     url: baseAPI + 'admin/get_user_details/', 
     params: {email: current}, 
    }) 
    }, 

und anschließend können Sie die Variable, die Sie in Ihre hTML-Datei mit Griffen drucken möchten machen können.

Hoffe, es hilft.

+0

okay, also muss ich api dafür erstellen? Genau das, was ich tun möchte, ist Daten aus Dynamodb (Amazon Web Services db) mit Python-Framework zu holen und es mit angularjs – User0706

+0

anzuzeigen Ja, ich denke, das Erstellen einer API könnte Ihr Problem lösen.Sogar mein Projekt beinhaltet Daten, die im s3-Bucket gespeichert sind, und wir haben unser gesamtes Datenbankschema mithilfe von Django-Modellen definiert. Ich frage unsere Datenbank in viel mehr APIs ab, die ich in custom.py-Datei geschrieben habe, und dann sende ich die Antwortdaten, die von jedem der API in JSON generiert werden (die dann in eckig behandelt werden und die Daten werden an der Vorderseite gerendert) Ende). – Shubhanshu

Verwandte Themen