2017-03-10 1 views
1

Ich bin ziemlich neu bei Python und Django. Ich weiß aber, was dieser Fehler anzeigt. Es sagt, dass ich importieren muss Ansichten in die URLs Das seltsame Ding ist auf meinem Laptop läuft es gut und lädt die Seite, aber auf meinem Desktop ist es nicht ich benutze ein Git Repo, und zog nur die Arbeitsänderungen von meinem Laptop, ich benutze das gleiche Python-Interpreter auf beiden Maschinen (3.5.3) .Ich erhalte die gleiche Fehlermeldung für alle URLs, wie der Titel bereits.raise TypeError ('view muss eine aufrufbar sein oder eine Liste/Tupel im Falle von include()

Hier ist der Voll Stapel

Unhandled exception in thread started by <function check_errors. 

<locals>.wrapper at 0x000001FA9FAB7400> 
Traceback (most recent call last): 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper 
    fn(*args, **kwargs) 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\management\commands\runserver.py", line 121, in inner_run 
    self.check(display_num_errors=True) 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\management\base.py", line 374, in check 
    include_deployment_checks=include_deployment_checks, 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\management\base.py", line 361, in _run_checks 
    return checks.run_checks(**kwargs) 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\checks\registry.py", line 81, in run_checks 
    new_errors = check(app_configs=app_configs) 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\checks\urls.py", line 14, in check_url_config 
    return check_resolver(resolver) 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\core\checks\urls.py", line 24, in check_resolver 
    for pattern in resolver.url_patterns: 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\utils\functional.py", line 35, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\urls\resolvers.py", line 313, in url_patterns 
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\utils\functional.py", line 35, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\urls\resolvers.py", line 306, in urlconf_module 
    return import_module(self.urlconf_name) 
    File "C:\Python35\lib\importlib\__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 673, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "C:\Users\Rpg Legend\PycharmProjects\matchmaker\src\matchmaker\urls.py", line 9, in <module> 
    url(r'^$', 'newsletter.views.home', name='home'), 
    File "C:\Users\Rpg Legend\mm\lib\site-packages\django\conf\urls\__init__.py", line 85, in url 
    raise TypeError('view must be a callable or a list/tuple in the case of include().') 
TypeError: view must be a callable or a list/tuple in the case of include(). 

Heiratsvermittler (Projekt/main) /urls.py:

from django.conf import settings 
from django.conf.urls import include, url 
from django.conf.urls.static import static 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^$', 'newsletter.views.home', name='home'), 
    url(r'^contact/$', 'newsletter.views.contact', name='contact'), 
    url(r'^question/$', 'questions.views.home', name='question_home'), 
    url(r'^about/$', 'matchmaker.views.about', name='about'), 
] 

newsletter/views.py

from django.conf import settings 
from django.core.mail import send_mail 
from django.shortcuts import render 
from questions.models import Question 

from .forms import ContactForm, SignUpForm 


# Create your views here. 
def home(request): 
    title = 'Sign Up Now' 
    form = SignUpForm(request.POST or None) 
    context = { 
     "title": title, 
     "form": form 
    } 


def contact(request): 
    title = 'Contact Us' 
    title_align_center = True 
    form = ContactForm(request.POST or None) 

    if form.is_valid(): 
     form_email = form.cleaned_data.get("email") 
     form_message = form.cleaned_data.get("message") 
     form_full_name = form.cleaned_data.get("full_name") 
     subject = 'Site contact form' 
     from_email = settings.EMAIL_HOST_USER 
     to_email = [from_email, '[email protected]'] 
     contact_message = "%s: %s via %s" % (
      form_full_name, 
      form_message, 
      form_email) 
     some_html_message = """ 
      <h1>hello</h1> 
     """ 

     send_mail(subject, 
       contact_message, 
       from_email, 
       to_email, 
       html_message=some_html_message, 
       fail_silently=True) 

    context = { 
     "form": form, 
     "title": title, 
     "title_align_center": title_align_center, 
    } 
    return render(request, "forms.html", context) 

Heiratsvermittler/views.py

from django.shortcuts import render 

def about(request): 
    return render(request, "about.html", {}) 

I Ich hoffe auf etwas Hilfe oder Anleitung. wenn ich so etwas mache:

from app_name import views 
from newsletter.views import home, contact 

Pycharm gräbt es aus und sagt, dass es eine unbenutzte Importanweisung ist. In den anderen Projekten, an denen ich gearbeitet habe, musste ich keine meiner Ansichten in das main/project urls.py importieren.

+0

In matchmaker/views.py: Sie sollten den Inhalt der "über" -Funktion einrücken.Ich weiß jedoch nicht, was die Lösung für Ihr Problem ist. – Ambitions

Antwort

1

Sie haben die Aussicht auf Ihre URLs importiert, wie erforderlich, aber Sie haben den nächsten Schritt, die Ansichten in Ihrer URL-Muster zu verwenden, anstatt der gepunkteten String Pfade

from newsletter.views import home, contact 

urlpatterns = [ 
    url(r'^$', home, name='home'), 
    url(r'^contact/$', contact, name='contact'), 
    ... 
] 

Sobald Sie eine verpasste verwenden In einem URL-Muster sollte PyCharm es nicht mehr als nicht verwendeten Import markieren.

Unterstützung für gepunktete Zeichenfolge Pfade wurde in Django 1.10 entfernt. Wenn Ihr Code auf einem Computer funktioniert, aber nicht auf einem anderen, klingt es so, als würden Sie zwei verschiedene Versionen von Django ausführen. Es ist wichtig zu versuchen, die gleichen Paketversionen auf allen Computern zu installieren, um Probleme wie diese zu vermeiden. Informieren Sie sich über pip freeze und Anforderungsdateien, falls Sie dies nicht bereits getan haben (try this article).

+0

Danke für die Hilfe. Das hat den Trick gemacht. An einem Punkt hatte ich es so, aber behalte zu Hause und Kontakt in Anführungszeichen als String-Wert. Was ist allerdings seltsam, dass meine Version auf meinem Laptop eine veraltete Django-Version sein muss? Weil die alte Syntax und die neue Syntax auf meinem Laptop funktionieren. Ich weiß noch nicht genug, um zu wissen, wie der Python-Interpreter in Pycharm damit umgeht. Ist es eine Warnung oder Benachrichtigung, dass Django veraltet ist? Ich habe nur 1,10 meines Wissens verwendet, aber die Tatsache, dass ich beide verwenden kann, scheint die einzige Erklärung für dieses Ereignis zu sein? –

+0

Sie können die installierte Version von Django mit 'python manage.py version' oder' pip freeze' überprüfen. Eine ältere Version von Django ist nicht unbedingt veraltet. Django 1.8.x ist eine Langzeit-Support-Version, die bis mindestens April 2018 unterstützt wird, und Django 1.9.x wird weiterhin unterstützt, bis Django 1.11 im nächsten Monat veröffentlicht wird. – Alasdair

+0

Ich verstehe Ihre Frage nicht "ist es eine Warnung oder eine Benachrichtigung, dass Django veraltet ist". PyCharm verwendet die Version von Django, die installiert wird. Soweit ich weiß, warnt es Sie nicht, wenn Sie eine veraltete Version verwenden. Das Einfärben von Importen ist lediglich ein Hinweis darauf, dass Sie möglicherweise die Importe entfernen und das Modul sauber halten können. – Alasdair

0

Ihre home Methode nicht return eine gerenderte Vorlage noch, die erwartet wird.

return render(request, "home.html", context) 

Rendering Ihre home Ansicht sollte in der aktuellen Situation auf Ihrem Laptop oder irgendwo sonst nicht funktionieren. Soweit ich weiß, würden auch die älteren Versionen scheitern.

Auch Django unterstützt keine Importpfade seit 1.10, aber Sie sollten die Ansichten importieren und an Ihre URLs übergeben.

from newsletter import views as newsletter_views 
from questions import views as question_views 
from matchmaker import views as matchmaker_views 

urlpatterns = [ 
    url(r'^$', newsletter_views.home, name='home'), 
    url(r'^contact/$', newsletter_views.contact, name='contact'), 
    url(r'^question/$', question_views.home, name='question_home'), 
    url(r'^about/$', matchmaker_views.about, name='about'), 
] 

Sie sollten von den verschiedenen Anwendungen in differen urls.py Datei jeder App Aufspalten besser dran, die Namespacing Konflikte zu verhindern.

Verwandte Themen