জ্যাঙ্গো ইউআরএলগুলির প্রকারের ত্রুটি: অন্তর্ভুক্তের ক্ষেত্রে ভিউ অবশ্যই কলযোগ্য বা তালিকাগুলি / টুপল হতে হবে


111

জ্যাঙ্গো ১.১০ তে আপগ্রেড করার পরে আমি ত্রুটিটি পেয়েছি:

TypeError: view must be a callable or a list/tuple in the case of include().

আমার ইউআরএল.পি নিম্নরূপ:

from django.conf.urls import include, url

urlpatterns = [
    url(r'^$', 'myapp.views.home'),
    url(r'^contact/$', 'myapp.views.contact'),
    url(r'^login/$', 'django.contrib.auth.views.login'),
]

সম্পূর্ণ ট্রেসব্যাকটি হ'ল:

Traceback (most recent call last):
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 121, in inner_run
    self.check(display_num_errors=True)
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/management/base.py", line 385, in check
    include_deployment_checks=include_deployment_checks,
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/management/base.py", line 372, in _run_checks
    return checks.run_checks(**kwargs)
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/checks/registry.py", line 81, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/checks/urls.py", line 14, in check_url_config
    return check_resolver(resolver)
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/checks/urls.py", line 24, in check_resolver
    for pattern in resolver.url_patterns:
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/utils/functional.py", line 35, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/urls/resolvers.py", line 310, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/utils/functional.py", line 35, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/urls/resolvers.py", line 303, in urlconf_module
    return import_module(self.urlconf_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/Users/alasdair/dev/urlproject/urlproject/urls.py", line 28, in <module>
    url(r'^$', 'myapp.views.home'),
  File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/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().

যদি আমরা দৃশ্যে সজ্জকার ব্যবহার করি এবং যদি এটি কিছু না ফেরায়। এই ক্ষেত্রে এছাড়াও আমরা ত্রুটি উপরোক্ত পেতে। সম্প্রতি আমি এই ত্রুটি পেয়েছি।
anjaneyulubatta505

@ অঞ্জনিয়ুলু বাট্টা হ্যাঁ, কোনও সাজসজ্জা যদি কোনও মতামত না ফেরায় তবে তা স্পষ্টতই ফিরে আসে None, যা TypeErrorউপরের মত একটি কারণ হতে পারে ।
আলাসদায়ের

উত্তর:


257

জ্যাঙ্গো 1.10 আপনাকে আর 'myapp.views.home'ইউআরএল নিদর্শনগুলিতে স্ট্রিং (উদাহরণস্বরূপ ) হিসাবে দর্শন নির্দিষ্ট করার অনুমতি দেয় না ।

সমাধানটি urls.pyভিউ কলযোগ্য হিসাবে অন্তর্ভুক্ত করতে আপনার আপডেট করা update এর অর্থ হল আপনার নিজের মধ্যে ভিউটি আমদানি করতে হবে urls.py। যদি আপনার ইউআরএল নিদর্শনগুলির নাম না থাকে তবে এখন একটি যুক্ত করার উপযুক্ত সময়, কারণ ডটেড পাইথনের পথের সাথে বিপরীতে কাজ করা আর কাজ করে না।

from django.conf.urls import include, url

from django.contrib.auth.views import login
from myapp.views import home, contact

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

যদি অনেকগুলি দর্শন থাকে তবে স্বতন্ত্রভাবে সেগুলি আমদানি করা অসুবিধে হতে পারে। একটি বিকল্প হ'ল আপনার অ্যাপ্লিকেশন থেকে দেখা মডিউল আমদানি করা।

from django.conf.urls import include, url

from django.contrib.auth import views as auth_views
from myapp import views as myapp_views

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

নোট করুন যে আমরা ব্যবহার করেছি as myapp_viewsএবং as auth_views, যা আমাদের views.pyসংঘর্ষ না করে একাধিক অ্যাপ্লিকেশন থেকে আমদানি করতে সহায়তা করে ।

দেখুন জ্যাঙ্গো URL টি ডেস্প্যাচার ডক্স আরো তথ্যের জন্য urlpatterns


শ্রেণিভিত্তিক দৃষ্টিভঙ্গি সম্পর্কে কী?
ষভ অগ্রহরি

2
শ্রেণিভিত্তিক দর্শনগুলির জন্য আপনি কখনই বিন্দুযুক্ত স্ট্রিং পাথটি ব্যবহার করতে সক্ষম হননি, সুতরাং তারা এই প্রশ্নের সাথে প্রাসঙ্গিক নয়।
আলাসডায়ার

আমি এই মত পরিবর্তনটি কিছু সহায়ক (মাইগ্রেশন স্ক্রিপ্ট) এর সাথে দেখতে দেখতে চাই, কারণ আপনি উপসর্গটিও ব্যবহার করতে সক্ষম নন। import_moduleপুরানো পথে স্ট্রিংয়ের মোড়ক হিসাবে আপনাকে নিজের অনুসন্ধান তৈরি করতে সহায়তা করতে পারে, এমন একটি ক্ষেত্রে যখন হাজার হাজার url আপনাকে আপডেট করার অপেক্ষায় থাকে।
সাওওমির লেনার্ট

আপনাকে এখনও অন্য প্যাকেজগুলি আমদানি করতে হবে - django.conf.urls থেকে আমদানি url। আপনার সমাধান ঠিক করুন।
ওয়েবকোমার

1
@ ওয়েবেকমার আমি প্রশ্ন / উত্তরে ইউআরএল আমদানি অন্তর্ভুক্ত করি নি কারণ জ্যাঙ্গো ১.১০ তে আপগ্রেড করার সময় সেগুলি একই থাকে (যদি না আপনি django.conf.urls.defaultsজাজানো থেকে 1.5 বা তার আগে না থাকেন)। আপনি যেমনটি বলেছেন তেমন আমদানি যুক্ত করেছি, তবে আমি নিশ্চিত নই যে এটি একটি ভাল ধারণা, যেহেতু জ্যাঙ্গো ২.০ এ আমদানি আবার পরিবর্তন হয়। আপনি যদি সঠিক আমদানি জানতে চান তবে আপনার জাজানো সংস্করণের দস্তাবেজগুলি (উদাহরণস্বরূপ 1.11 , 2.0 ) দেখার জন্য সেরা জায়গা।
আলাসদায়ের

3

এই ত্রুটিটির অর্থ myapp.views.homeহ'ল কোনও ফাংশনের মতো এটি বলা যায় না। এটি আসলে একটি স্ট্রিং। আপনার সমাধানটি জ্যাঙ্গো ১.৯-এ কাজ করে, তবুও এটি একটি সতর্কবাণী বলেছে যে এটি সংস্করণ ১.১০ থেকে অবনতি হবে, যা ঘটেছিল ঠিক তেমন। @ আলাসডায়ারের পূর্ববর্তী সমাধানটি স্ক্রিপ্টে প্রয়োজনীয় ভিউ ফাংশন আমদানি করে from myapp import views as myapp_views বা এর মাধ্যমে from myapp.views import home, contact


1

আপনার যদি একটি ভিউ এবং মডিউলের নামের সংঘর্ষ থাকে তবে আপনি এই ত্রুটিটিও পেতে পারেন। আমি ভিউ ফোল্ডারের অধীনে আমার ভিউ ফাইলগুলি বিতরণ করার সময় ত্রুটি পেয়েছি এবং ভিউ /views/view1.py, /views/view2.py2.py এ টেবিল.পি নামের কিছু মডেল আমদানি করেছি যা ভিউ 1.py এ একটি ভিউয়ের নাম হতে পারে। সুতরাং ভিউ কার্যকারিতা হিসাবে সহায়ক হিসাবে নামকরণ v_table(request,id)


0

আপনার কোড হয়

urlpatterns = [
    url(r'^$', 'myapp.views.home'),
    url(r'^contact/$', 'myapp.views.contact'),
    url(r'^login/$', 'django.contrib.auth.views.login'),
]

আপনি include()ফাংশন আমদানি করার সাথে সাথে এটি অনুসরণ করুন :

urlpatterns = [
    url(r'^$', views.home),
    url(r'^contact/$', views.contact),
    url(r'^login/$', views.login),
]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.