python - 即使在 BASE_DIR 与 settings.py 中的模板连接后,如何修复 TemplatesDoesNotExist 错误?
问题描述
图 1- 错误
我notice Exception Value: registration/login.html
,我什至没有在模板中,相反,我有 sign-in.html,我不知道为什么它提到 login.html。请在下面查看我的模板文件夹作为图像 3-模板。
- 我正在尝试修复上述错误。我的项目路径看起来像
图 2- 项目路径
图 3- 模板
- 上图 2 显示我的模板文件夹位于 foodtaskerapp 文件夹中
- 在 settings.py 中,我已
'DIRS': [os.path.join(BASE_DIR, 'templates')],
在 TEMPLATES 部分添加。 - 我认为有一个错误,因为在我们可以从 BASE_DIR 获取模板之前,我们需要通过 foodtaskerapp。这导致我进入以下步骤
- 在 settings.py 我尝试
'DIRS': [os.path.join(BASE_DIR, 'foodtaskerapp','templates')],
替换第 2 步 - 完成上述步骤后,我也尝试了
'DIRS': [os.path.join(BASE_DIR, 'foodtaskerapp\\templates')],
. 我在这里使用了两个斜杠,因为当我使用交互式控制台中的打印命令时,我看到路径是以那种格式给出的。 - 我还尝试将我的模板文件夹从 foodtaskerapp 移动到根文件夹,然后我检查如下以确认我是否在正确的路径中:
from django.conf import settings
print(settings.TEMPLATES)
然后我得到了
'DIRS': ['C:\\Users\\simple_tech\\Desktop\\foodtasker-master\\foodtasker-master\\templates']
以上表明我走在正确的道路上。
但是每当我在运行后单击服务器 URL 时,我仍然收到错误“TemplatesDoesNotExist”
python manage.py runserver
为了进一步调查,下面是我的
URLS.PY
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.conf.urls.static import static
from django.conf import settings
from foodtaskerapp import views, apis
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home, name='home'),
url(r'^restaurant/sign-in/$', auth_views.LoginView.as_view(), {'template_name': 'restaurant/sign_in.html'}, name = 'restaurant-sign-in'),
url(r'^restaurant/sign-out', auth_views.LogoutView.as_view(), {'next_page': '/'}, name = 'restaurant-sign-out'),
url(r'^restaurant/sign-up', views.restaurant_sign_up, name = 'restaurant-sign-up'),
url(r'^restaurant/$', views.restaurant_home, name = 'restaurant-home'),
url(r'^restaurant/account/$', views.restaurant_account, name = 'restaurant-account'),
url(r'^restaurant/meal/$', views.restaurant_meal, name = 'restaurant-meal'),
url(r'^restaurant/meal/add/$', views.restaurant_add_meal, name = 'restaurant-add-meal'),
url(r'^restaurant/meal/edit/(?P<meal_id>\d+)/$', views.restaurant_edit_meal, name = 'restaurant-edit-meal'),
url(r'^restaurant/order/$', views.restaurant_order, name = 'restaurant-order'),
url(r'^restaurant/report/$', views.restaurant_report, name = 'restaurant-report'),
# Sign In/ Sign Up/ Sign Out
url(r'^api/social/', include('rest_framework_social_oauth2.urls')),
# /convert-token (sign in/ sign up)
# /revoke-token (sign out)
url(r'^api/restaurant/order/notification/(?P<last_request_time>.+)/$', apis.restaurant_order_notification),
# APIs for CUSTOMERS
url(r'^api/customer/restaurants/$', apis.customer_get_restaurants),
url(r'^api/customer/meals/(?P<restaurant_id>\d+)/$', apis.customer_get_meals),
url(r'^api/customer/order/add/$', apis.customer_add_order),
url(r'^api/customer/order/latest/$', apis.customer_get_latest_order),
url(r'^api/customer/driver/location/$', apis.customer_driver_location),
# APIs for DRIVERS
url(r'^api/driver/orders/ready/$', apis.driver_get_ready_orders),
url(r'^api/driver/order/pick/$', apis.driver_pick_order),
url(r'^api/driver/order/latest/$', apis.driver_get_latest_order),
url(r'^api/driver/order/complete/$', apis.driver_complete_order),
url(r'^api/driver/revenue/$', apis.driver_get_revenue),
url(r'^api/driver/location/update/$', apis.driver_update_location),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
**views.py**
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from foodtaskerapp.forms import UserForm, RestaurantForm, UserFormForEdit, MealForm
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from foodtaskerapp.models import Meal, Order, Driver
from django.db.models import Sum, Count, Case, When
def home(request):
return redirect(restaurant_home)
@login_required(login_url='/restaurant/sign-in/')
def restaurant_home(request):
return redirect(restaurant_order)
@login_required(login_url='/restaurant/sign-in/')
def restaurant_account(request):
user_form = UserFormForEdit(instance=request.user)
restaurant_form = RestaurantForm(instance=request.user.restaurant)
if request.method == "POST":
user_form = UserFormForEdit(request.POST, instance=request.user)
restaurant_form = RestaurantForm(request.POST, request.FILES, instance=request.user.restaurant)
if user_form.is_valid() and restaurant_form.is_valid():
user_form.save()
restaurant_form.save()
return render(request, 'restaurant/account.html', {
"user_form": user_form,
"restaurant_form": restaurant_form
})
@login_required(login_url='/restaurant/sign-in/')
def restaurant_meal(request):
meals = Meal.objects.filter(restaurant=request.user.restaurant).order_by("-id")
return render(request, 'restaurant/meal.html', {"meals": meals})
@login_required(login_url='/restaurant/sign-in/')
def restaurant_add_meal(request):
form = MealForm()
if request.method == "POST":
form = MealForm(request.POST, request.FILES)
if form.is_valid():
meal = form.save(commit=False)
meal.restaurant = request.user.restaurant
meal.save()
return redirect(restaurant_meal)
return render(request, 'restaurant/add_meal.html', {
"form": form
})
@login_required(login_url='/restaurant/sign-in/')
def restaurant_edit_meal(request, meal_id):
form = MealForm(instance=Meal.objects.get(id=meal_id))
if request.method == "POST":
form = MealForm(request.POST, request.FILES, instance=Meal.objects.get(id=meal_id))
if form.is_valid():
form.save()
return redirect(restaurant_meal)
return render(request, 'restaurant/edit_meal.html', {
"form": form
})
@login_required(login_url='/restaurant/sign-in/')
def restaurant_order(request):
if request.method == "POST":
order = Order.objects.get(id=request.POST["id"], restaurant=request.user.restaurant)
if order.status == Order.COOKING:
order.status = Order.READY
order.save()
orders = Order.objects.filter(restaurant=request.user.restaurant).order_by("-id")
return render(request, 'restaurant/order.html', {"orders": orders})
@login_required(login_url='/restaurant/sign-in/')
def restaurant_report(request):
# Calculate revenue and number of order by current week
from datetime import datetime, timedelta
revenue = []
orders = []
# Calculate weekdays
today = datetime.now()
current_weekdays = [today + timedelta(days=i) for i in range(0 - today.weekday(), 7 - today.weekday())]
for day in current_weekdays:
delivered_orders = Order.objects.filter(
restaurant=request.user.restaurant,
status=Order.DELIVERED,
created_at__year=day.year,
created_at__month=day.month,
created_at__day=day.day
)
revenue.append(sum(order.total for order in delivered_orders))
orders.append(delivered_orders.count())
# Top 3 Meals
top3_meals = Meal.objects.filter(restaurant=request.user.restaurant) \
.annotate(total_order=Sum('orderdetails__quantity')) \
.order_by("-total_order")[:3]
meal = {
"labels": [meal.name for meal in top3_meals],
"data": [meal.total_order or 0 for meal in top3_meals]
}
# Top 3 Drivers
top3_drivers = Driver.objects.annotate(
total_order=Count(
Case(
When(order__restaurant=request.user.restaurant, then=1)
)
)
).order_by("-total_order")[:3]
driver = {
"labels": [driver.user.get_full_name() for driver in top3_drivers],
"data": [driver.total_order for driver in top3_drivers]
}
return render(request, 'restaurant/report.html', {
"revenue": revenue,
"orders": orders,
"meal": meal,
"driver": driver
})
def restaurant_sign_up(request):
user_form = UserForm()
restaurant_form = RestaurantForm()
if request.method == "POST":
user_form = UserForm(request.POST)
restaurant_form = RestaurantForm(request.POST, request.FILES)
if user_form.is_valid() and restaurant_form.is_valid():
new_user = User.objects.create_user(**user_form.cleaned_data)
new_restaurant = restaurant_form.save(commit=False)
new_restaurant.user = new_user
new_restaurant.save()
login(request, authenticate(
username=user_form.cleaned_data["username"],
password=user_form.cleaned_data["password"]
))
return redirect(restaurant_home)
return render(request, "restaurant/sign_up.html", {
"user_form": user_form,
"restaurant_form": restaurant_form
})
**model.py**
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
class Restaurant(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='restaurant')
name = models.CharField(max_length=500)
phone = models.CharField(max_length=500)
address = models.CharField(max_length=500)
logo = models.ImageField(upload_to='restaurant_logo/', blank=False)
def __str__(self):
return self.name
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='customer')
avatar = models.CharField(max_length=500)
phone = models.CharField(max_length=500, blank=True)
address = models.CharField(max_length=500, blank=True)
def __str__(self):
return self.user.get_full_name()
class Driver(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='driver')
avatar = models.CharField(max_length=500)
phone = models.CharField(max_length=500, blank=True)
address = models.CharField(max_length=500, blank=True)
location = models.CharField(max_length=500, blank=True)
def __str__(self):
return self.user.get_full_name()
class Meal(models.Model):
restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE, related_name='meal')
name = models.CharField(max_length=500)
short_description = models.CharField(max_length=500)
image = models.ImageField(upload_to='meal_images/', blank=False)
price = models.IntegerField(default=0)
def __str__(self):
return self.name
class Order(models.Model):
COOKING = 1
READY = 2
ONTHEWAY = 3
DELIVERED = 4
STATUS_CHOICES = (
(COOKING, "Cooking"),
(READY, "Ready"),
(ONTHEWAY, "On the way"),
(DELIVERED, "Delivered"),
)
customer = models.ForeignKey(Customer, on_delete=models.DO_NOTHING)
restaurant = models.ForeignKey(Restaurant, on_delete=models.DO_NOTHING)
driver = models.ForeignKey(Driver, on_delete=models.DO_NOTHING, blank = True, null = True)
address = models.CharField(max_length=500)
total = models.IntegerField()
status = models.IntegerField(choices = STATUS_CHOICES)
created_at = models.DateTimeField(default = timezone.now)
picked_at = models.DateTimeField(blank = True, null = True)
def __str__(self):
return str(self.id)
class OrderDetails(models.Model):
order = models.ForeignKey(Order, on_delete=models.DO_NOTHING, related_name='order_details')
meal = models.ForeignKey(Meal, on_delete=models.DO_NOTHING)
quantity = models.IntegerField()
sub_total = models.IntegerField()
def __str__(self):
return str(self.id)
请帮忙!
谢谢你的时间。
解决方案
推荐阅读
- excel - 数据透视表标签过滤器 - 多个值
- apache-flink - 使用 Apache Flink 时无法解决方法 reduce
- python - 执行 python 脚本时出现我不知道的错误
- flutter - Flutter - 无限容器
- python - 是否可以使用 NetLogo 控制 API 来远程控制 NetLogo 的*运行*实例?
- activemq - 我们可以通过消息数限制队列吗:ActiveMQ 5
- c++ - 当我使用 CMake 编译程序以捕获异常时,会发生编译错误。任何人都可以帮助我吗?
- sql - 学生联系方式 - Oracle SQL
- c++ - 实现二叉树遍历时的核心转储
- python - 使用 Python Tubes 和 Twisted 模块获取 TypeError