【问题标题】:Can't import views from application the the URLS of project in Django 3.1无法从应用程序中导入视图 Django 3.1 中项目的 URL
【发布时间】:2021-08-10 05:58:43
【问题描述】:

我无法将 app 文件夹中的视图导入项目文件夹的 URL。我已经尝试了所有可能的方法,例如 'from . import views' 或 'from newapp import views as newapp_views' 以及我在互联网上搜索的 2-3 个替代方案。我的应用名称是 newapp,项目名称是 newproject。请帮帮我。

This is my models file:

from django.db import models

class User(models.Model):
    first_name=models.CharField(max_length=128)
    
last_name=models.CharField(max_length=128)
    
email=models.EmailField(max_length=256, unique=True)



This is my URLS of newapp folder:

from django.conf.urls import url

from django.urls.resolvers import URLPattern

from .models import views

urlpatterns= [url(r'^$', views.users, name='users'),
]

This is my views of newapp folder:

from django.shortcuts import render

from .models import User

def index(request):
    
        return render(request, 'newapp/index.html')

def users(request):
    
        user_list=User.objects.order_by('first_name')
    

        user_dict={'users': user_list}
    
        return render(request, 'newapp/users.html', context=user_dict)


This is my URLS of newproect folder:

from django.contrib import admin

from django.urls import path,include

from newapp import views

     urlpatterns = [
   
          path('', views.index, name='index'),
          path('users/',views.users, name="users"),
          path('admin/', admin.site.urls),

]


This is my settings file:


    from pathlib import Path
    
    import os
    
    BASE_DIR = Path(__file__).resolve().parent.parent
    
    TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')
    
    DEBUG = True
    
    ALLOWED_HOSTS = []
    
    
    INSTALLED_APPS = [
        
        'django.contrib.admin',
    
        'django.contrib.auth',
    
        'django.contrib.contenttypes',
    
        'django.contrib.sessions',
    
        'django.contrib.messages',
    
        'django.contrib.staticfiles',
    
        'newapp'
    ]
    
    
    TEMPLATES = [
        {
            
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
    
            'DIRS': [TEMPLATE_DIR,],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }

【问题讨论】:

  • 错误是什么?你的意思是你不能?
  • 当我使用'from newapp import views'时,它显示错误:path('',views.index,name ='index'),AttributeError:模块'newapp.views'没有属性“索引”
  • 当我使用 'from .导入视图',它显示错误:来自 . import views ImportError: cannot import name 'views' from 'newproject' (C:\Users\acer\Documents\djangoprojects\newproj\newproject\newproject_init_.py)

标签: django django-models django-rest-framework django-views django-templates


【解决方案1】:

您不能像这样导入文件:from newapp import views

只有当您的urls.py 文件位于您的应用文件夹中时,from . import views 才会起作用,而 Django 默认将其放在您的项目文件夹中。

如果您选择为每个应用分隔 urls.py 文件(这是一个很好的做法,因为您的项目可能会发展成多个应用),您可以执行以下操作:

newapp/urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('users/',views.users, name="users"),
    path('admin/', admin.site.urls)
]

newproject/urls.py

from django.urls import path, include

urlpatterns = [
    path('', include('newapp.urls'))
]

这样您只需在项目 url 文件中包含应用程序 url,您可以使用路径为所有应用程序 url 加上前缀(而不是像上面的空白字符串)。

【讨论】:

  • 但我已经为 app 文件夹制作了不同的视图文件。我已经给出了上面两个 URL 文件的代码。
  • @AsadTayyab 我没有注意到这一点,所以我编辑了我的答案,为您提供了一个分隔 url.py 文件的示例。
  • 非常感谢!这有帮助。 :)
  • @AsadTayyab 没问题!请考虑接受我的回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多