Saya cukup baru di python dan Django. Saya tahu apa yang ditunjukkan oleh kesalahan ini. Dikatakan saya perlu mengimpor tampilan ke url. Yang aneh adalah di laptop saya itu berjalan dengan baik dan memuat halaman, tetapi di desktop saya tidak. Saya menggunakan git repo, dan baru saja menarik perubahan yang berfungsi dari laptop saya. Saya menggunakan juru bahasa Python yang sama di kedua mesin(3.5.3). Saya mendapatkan pesan kesalahan yang sama untuk semua url seperti yang dinyatakan oleh judul.

Ini Tumpukan Lengkapnya

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().

mak comblang(project/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'),
]

buletin/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, 'youotheremail@email.com']
        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)

mak comblang/views.py

from django.shortcuts import render

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

Saya berharap untuk sedikit bantuan atau bimbingan. setiap kali saya melakukan sesuatu seperti ini:

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

Pycharm menghilangkannya, dan mengatakan itu adalah pernyataan impor yang tidak digunakan. Dalam beberapa proyek lain yang telah saya kerjakan, saya tidak perlu mengimpor pandangan saya ke main/project urls.py .

1
Richard Bretton 10 Maret 2017, 10:55

2 jawaban

Jawaban Terbaik

Anda telah mengimpor tampilan ke url Anda seperti yang diperlukan, tetapi Anda melewatkan langkah berikutnya untuk menggunakan tampilan dalam pola url Anda alih-alih jalur string bertitik

from newsletter.views import home, contact

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

Setelah Anda menggunakan tampilan dalam pola url, PyCharm seharusnya tidak lagi menandainya sebagai impor yang tidak digunakan.

Dukungan untuk jalur string putus-putus telah dihapus di Django 1.10. Jika kode Anda bekerja pada satu mesin tetapi tidak pada mesin lainnya, maka sepertinya Anda menjalankan dua versi Django yang berbeda. Sangat penting untuk mencoba menginstal versi paket yang sama di semua mesin untuk menghindari masalah seperti ini. Cari tahu tentang pip freeze dan file persyaratan jika Anda belum melakukannya (coba artikel ini).

1
Alasdair 11 Desember 2017, 19:33

Metode home Anda belum return template yang dirender, yang diharapkan.

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

Merender tampilan home Anda seharusnya tidak berfungsi dalam situasi saat ini di laptop Anda atau di mana pun. Sejauh yang saya tahu semua versi yang lebih lama akan gagal juga.

Juga Django tidak mendukung jalur impor sejak 1.10, tetapi Anda harus mengimpor tampilan, dan meneruskannya ke url Anda.

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'),
]

Sebaiknya Anda membagi aplikasi yang berbeda menjadi file urls.py yang berbeda dari setiap aplikasi, untuk mencegah konflik namespace.

0
Nrzonline 10 Maret 2017, 08:19