Django NoReverseMatch在/

时间:2016-03-13 19:01:20

标签: python django pillow

我正在尝试使用Pillow在我的网络应用中添加用户可上传的图像。我创建了一个Django Upload模型并在Admin中注册。只要我使用管理控制台添加照片,我就会收到以下错误。最初该网站工作正常

错误

from collection.backends import MyRegistrationView
from django.conf.urls import include, url
from django.contrib import admin
from collection import views
from django.conf import settings
from django.views.generic import TemplateView
from django.contrib.auth.views import (
    password_reset,
    password_reset_done,
    password_reset_confirm,
    password_reset_complete
    )

urlpatterns = [
   url(r'^$', views.index, name='home'),

   url(r'^about/$',TemplateView.as_view(template_name='about.html'),name='about'),

   url(r'^contact/$',TemplateView.as_view(template_name='contact.html'),name='contact'),

   url(r'^things/(?P<slug>[-\w]+)/$','collection.views.thing_detail',name='thing_detail'),

   url(r'^things/(?P<slug>[-\w]+)/edit/$','collection.views.edit_thing',name='edit_thing'),

   url(r'^things/(?P<slug>[-\w]+)/edit/weight$','collection.views.edit_weight',name='edit_weight'),

   url(r'^things/(?P<slug>[-\w]+)/delete/weight$','collection.views.remove_weight',name='remove_weight'),

   #WORKING url(r'^things/(?P<pk>\d+)/remove/$', 'collection.views.remove_weight', name='remove_weight'),

   url(r'^things/$',TemplateView.as_view(template_name='weight_removed.html'),name='weight_removed'),

   url(r'^(?P<slug>[\w\d-]+)/(?P<pk>\d+)/$','collection.views.remove_weight',name='remove_weight'),






   #url(r'^edit/(?P<slug>\d+)/weights$', 'collection.views.AddWeight',name='AddWeight'),
   # the new password reset URLs
   url(r'^accounts/password/reset/$',password_reset,{'template_name':'registration/password_reset_form.html'},name="password_reset"),
   url(r'^accounts/password/reset/done/$',password_reset_done,{'template_name':'registration/password_reset_done.html'},name="password_reset_done"),
   url(r'^accounts/password/reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',password_reset_confirm,{'template_name':'registration/password_reset_confirm.html'},name="password_reset_confirm"),
   url(r'^accounts/password/done/$',password_reset_complete,{'template_name':'registration/password_reset_complete.html'},name="password_reset_complete"),


   #setup additional registeration page
   url(r'^accounts/register/$',MyRegistrationView.as_view(),name='registration_register'),
   url(r'^accounts/create_thing/$','collection.views.create_thing',name='registration_create_thing'),

   url(r'^accounts/',include('registration.backends.default.urls')),
   url(r'^admin/', include(admin.site.urls)),


 ]

if settings.DEBUG:
    urlpatterns += [
        url(r'^media/(?P<path>.*)$','django.views.static.serve',{'document_root': settings.MEDIA_ROOT,}),
    ]

Urls.py

from django.db import models
from django.contrib.auth.models import User
from django.db import models
from django.utils import timezone

class Thing(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()
    slug = models.SlugField(unique=True)
    user = models.OneToOneField(User, blank=True, null=True)


class Weight(models.Model):
    date = models.DateTimeField(default=timezone.now)
    weight_value = models.CharField(max_length=255)
    thingRA = models.ForeignKey(Thing,related_name="weights")

    class Meta:
        order_with_respect_to = 'thingRA'
        ordering = ['date']

def get_image_path(instance, filename):
     return '/'.join(['thing_images', instance.thing.slug, filename])

class Upload(models.Model):
     thing = models.ForeignKey(Thing, related_name="uploads")
     image = models.ImageField(upload_to=get_image_path)

模特.py

from django.contrib import admin
# import your model
from collection.models import Thing, Weight, Upload


class ThingAdmin(admin.ModelAdmin):
    model = Thing
    list_display = ('name', 'description',)
    prepopulated_fields = {'slug': ('name',)}
    # and register it

admin.site.register(Thing, ThingAdmin)

class WeightAdmin(admin.ModelAdmin):
    model = Weight
    list_display = ('date','weight_value',)

admin.site.register(Weight, WeightAdmin)


class UploadAdmin(admin.ModelAdmin):
     list_display = ('thing', )
     list_display_links = ('thing',)

 # and register it
admin.site.register(Upload, UploadAdmin)

Admin.py

{% load staticfiles %}

<!DOCTYPE html>
<html>
<head>

    <title>
    {% block title %}
     WEB PAGE BY SHASHANK
    {% endblock title %}
    </title>
    <link rel="stylesheet" href="{% static 'css/style.css' %}" />

</head>
<body>
        <div id="page">
        <div id="logo">
            <h1><a href="/" id="logoLink">S PORTAL</a></h1>
        </div>
        <div id="nav">
            <ul>
                <li><a href="{% url 'home' %}">Home</a></li>
                <li><a href="{% url 'about' %}">About</a></li>
                <li><a href="{% url 'contact' %}">Contact</a></li>

        {% if user.is_authenticated %}
          <li><a href="{% url 'auth_logout' %}">Logout</a></li>

          <li><a href="{% url 'thing_detail' slug=user.thing.slug %}">My Profile</a></li>

        {% else %}
          <li><a href="{% url 'auth_login' %}">Login</a></li>

        <li><a href="{% url 'registration_register' %}">Register</a></li>
        {% endif %}
      </ul>
        </div>


        {% block content %}{% endblock content %}


        <div id="footer">
            <p>
        Webpage made by <a href="/" target="_blank">SHASHANK</a>
            </p>
        </div>
    </div>
</body>
</html>

base.html文件

from django.shortcuts import render,redirect,get_object_or_404
from collection.models import Thing, Weight
from collection.forms import ThingForm, WeightForm, ThingWeightFormSet
from django.template.defaultfilters import slugify
from django.contrib.auth.decorators import login_required
from django.http import Http404
from django.views.decorators.csrf import csrf_protect
from django.views.generic import ListView, CreateView, UpdateView
from django import forms

def index(request):
    things = Thing.objects.all()
    return render(request,'index.html',{'things':things,})

def thing_detail(request, slug):
    # grab the object...
    thingRA = Thing.objects.get(slug=slug)
    weights = thingRA.weights.all().order_by('-date')
    # and pass to the template
    return render(request, 'things/thing_detail.html', {'thing': thingRA, 'weights':weights,})

def edit_thing(request, slug):
    # grab the object
    thing = Thing.objects.get(slug=slug)
    # set the form we're using
    form_class = ThingForm

    # if we're coming to this view from a submitted form
    if request.method == 'POST':
        # grab the data from the submitted form and apply to
        # the form
        form = form_class(data=request.POST, instance=thing)
        if form.is_valid():
            # save the new data
            form.save()
            return redirect('thing_detail', slug=thing.slug)
# otherwise just create the form
    else:
        form = form_class(instance=thing)

# and render the template
    return render(request, 'things/edit_thing.html', {'thing': thing,'form': form,})

def create_thing(request):
    form_class = ThingForm
    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
            thing = form.save(commit=False)
            thing.user = request.user
            thing.slug = slugify(thing.name)
            thing.save()
            slug = slugify(thing.name)
            return redirect('thing_detail', slug=thing.slug)
    else:
        form = form_class()

    return render(request,'things/create_thing.html', {'form': form,})


def edit_weight(request, slug):
    thing = get_object_or_404(Thing, slug=slug)
    if request.method == "POST":
        form = WeightForm(request.POST)
        if form.is_valid():
            weight = form.save(commit=False)
            weight.thingRA = thing
            weight.save()
            return redirect('thing_detail', slug=thing.slug)
    else:
        form = WeightForm()
    return render(request, 'things/edit_weight.html', {'form': form})

"""WORKING WEIGHT
def remove_weight(request, pk):
            weight = get_object_or_404(Weight, pk=pk)
            thing_pk = weight.thingRA.pk
            weight.delete()
            return redirect('weight_removed')
"""


def remove_weight(request, pk, slug):
            weight = get_object_or_404(Weight, pk=pk)
            thing = get_object_or_404(Thing, slug=slug)
            thing_pk = weight.thingRA.pk
            weight.delete()
            return redirect('thing_detail', slug=slug)


@login_required
def edit_thing(request, slug):
    # grab the object...
    thing = Thing.objects.get(slug=slug)
    # make sure the logged in user is the owner of the thing
    if thing.user != request.user:
        raise Http404
        # set the form we're using...
    form_class = ThingForm
    # if we're coming to this view from a submitted form,
    if request.method == 'POST':
         # grab the data from the submitted form and
         # apply to the form
         form = form_class(data=request.POST, instance=thing)
         if form.is_valid():
             # save the new data
             form.save()
             return redirect('thing_detail', slug=thing.slug)
    # otherwise just create the form
    else:
        form = form_class(instance=thing)
        # and render the template
    return render(request, 'things/edit_thing.html', {'thing': thing,'form': form,})

View.py

cin >> name >> course >> grade;

3 个答案:

答案 0 :(得分:2)

我会说你有%PATH%的东西。你可以使用django shell来解决这个问题:

slug=""

根据您的模型定义from yourapp.models import Thing Thing.objects.get(slug='') 可以为空,但您的网址模式不接受空白slug。你必须修复你的slug字段或url模式。

答案 1 :(得分:1)

您可能在模板中使用{% url 'thing_detail' slug=thing.slug %},其中'thing'对象具有空slug属性。

在模板中添加一个条件,检查对象中的现有slug,以便不调用模板标记,或确保没有任何Thing对象有空白slug。

答案 2 :(得分:0)

终于明白了。问题在代码中没有出现。实际上我只需要从Django的管理面板注销。由于登录管理面板阻止其他用户与其相关数据进行交互。