2016-07-23 27 views
0

developers.I am Erlernen der django im Anschluss an diese book und die Änderungen für django 1.8Wie kann der Django-Import von der View-Funktion gelöst werden?

Der Fehler zeigt ist

name 'addPublisher' is not defined 

Request Method:  GET 
Request URL: http://127.0.0.1:8000/add 
Django Version:  1.8.7 
Exception Type:  NameError 
Exception Value:  

*name 'addPublisher' is not defined* 

Exception Location:  /home/abhi/Desktop/Trade/Trade/urls.py in <module>, line 26 
Python Executable: /usr/bin/python 
Python Version:  2.7.11 
Python Path:  

['/home/abhi/Desktop/Trade', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages'] 

Server-Zeit: Sa 23. Juli 2016 18.07.53 0.000

Mein views.py ist -

from django.shortcuts import render 
from django.db.models import Q 
from django.shortcuts import render_to_response 
from django.template import Template, Context 
from books.models import Book 
from books.forms import ContactForm,PublisherForm 
from django.core.mail import send_mail 
# Create your views here. 




def search(request): 
    query = request.GET.get('q', '') 
    if query: 
     qset = (
      Q(title__icontains=query) | 
      Q(authors__first_name__icontains=query) | 
      Q(authors__last_name__icontains=query) 
      ) 
     results = Book.objects.filter(qset).distinct() 
    else: 
     results = [] 
    return render_to_response("search.html", { 
     "results": results, 
     "query": query 
     }) 



def contact(request): 
    if request.method == 'POST': 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      topic = form.clean_data['topic'] 
      message = form.clean_data['message'] 
      sender = form.clean_data.get('sender', '[email protected]') 
      send_mail(
       'Feedback from your site, topic: %s' % topic, 
       message, sender, 
       ['[email protected]'] 
      ) 
      return HttpResponseRedirect('/contact/thanks/') 
    else: 
     form = ContactForm() 
    return render_to_response('contact.html', {'form': form}) 



def addPublisher(request): 
    if request == 'POST': 
     form = PublisherForm(request.POST) 
     if form.is_valid: 
      form.save() 
      return HttpResponseRedirect('add_publisher/thanks/') 
     else: 
      form = PublisherForm() 
     return render_to_response('book/addPublisher.html',{'form':form}) 

Mein urls.py hat folgende Code-

from django.conf.urls import include, url 
from django.contrib import admin 
from views import * 


urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$',home), 
    url(r'^search/$',search), 
    url(r'^contact/$',contact), 
    url(r'^add/$',addPublisher) 
    ] 
+0

Es sieht für mich so aus, als wäre Ihre views.py von einer der Webapps, sollten Sie sagen "von webapp.view import *" Um einfach zu sein, ist Ihre views.py und urls.py im selben Ordner? –

+1

wie folgt importieren: aus Ansichten import addPublisher, nicht so: aus Ansichten importieren * - auf diese Weise erhalten Sie möglicherweise eine informativere Fehlermeldung (zB vielleicht ist Ihr addPublisher in einer anderen Sichten-Datei in einem anderen Ordner usw., wie Djangoprojekte normalerweise viele haben) sie) – Bob

+1

Beachten Sie, dass das Django Buch mit Django 1.0 geschrieben wurde, das vor 11 Jahren veröffentlicht wurde. Es gibt viele Inkompatibilitäten zwischen 1.0 und 1.8, es wäre wahrscheinlich viel einfacher, mit einer aktuellen Ressource zu lernen. – knbk

Antwort

1

Ihre urls.py-Datei befindet sich wahrscheinlich nicht in derselben App (Ordner) wie Ihre views.py. Sie erhalten diese Fehlermeldung, dass addPublisher nicht definiert ist, weil es buchstäblich nicht dort, von es meine ich die app, wo urls.py befindet.

Wenn diese bestimmte views.py oben in einer anderen App befindet, importieren Sie es mit so etwas wie

von [Name der App] .views import *

Wie auch immer, uns das Layout Ihres Projekts zeigt wird uns helfen, Ihnen eine direktere und spezifischere Antwort zu geben! Vielen Dank.