Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 我在/blog u'获得NoReverseMatch;职位';在向项目添加某些功能后,不是注册的命名空间错误_Django_Django Models_Django Templates_Django Views - Fatal编程技术网

Django 我在/blog u'获得NoReverseMatch;职位';在向项目添加某些功能后,不是注册的命名空间错误

Django 我在/blog u'获得NoReverseMatch;职位';在向项目添加某些功能后,不是注册的命名空间错误,django,django-models,django-templates,django-views,Django,Django Models,Django Templates,Django Views,我有一个项目,其中包括一个主页,该主页具有博客功能和文本编辑功能。在添加文本编辑功能时,我似乎破坏了博客应用程序的几乎所有功能。在/上呈现的唯一内容是没有任何博客内容的空引导模块(链接也会反弹回/no) /blog,用于转到列表视图,返回/blog处的NoReverseMatch u'posts'不是已注册的命名空间错误 和任何进入详细视图的/blog/slug一样,我仍然可以通过django管理员创建博客文章 我知道我做错了什么,如果我把事情搞砸了,我需要一些帮助 目录结构如下所示 目录结构如

我有一个项目,其中包括一个主页,该主页具有博客功能和文本编辑功能。在添加文本编辑功能时,我似乎破坏了博客应用程序的几乎所有功能。在/上呈现的唯一内容是没有任何博客内容的空引导模块(链接也会反弹回/no)

/blog,用于转到列表视图,返回/blog处的NoReverseMatch u'posts'不是已注册的命名空间错误

和任何进入详细视图的/blog/slug一样,我仍然可以通过django管理员创建博客文章

我知道我做错了什么,如果我把事情搞砸了,我需要一些帮助

目录结构如下所示 目录结构如下:

 - src [Folder] 
   - content [Folder]
     - migrations [Folder]
     - __init__.py
     - admin.py
     - apps.py
     - models.py
     - tests.py
     - views.py
  - main [Folder]
     - settings [Folder]
         - __init__.py
         - base.py
     - migrations [Folder]
     - __init__.py
     - db.sqlite3
     - models.py
     - urls.py
     - views.py
     - wsgi.py
  - posts [Folder]
     - migrations [Folder]
     - templatetags [Folder]
     - __init__.py
     - admin.py
     - apps.py
     - forms.py
     - models.py
     - tests.py
     - urls.py
     - utils.py
     - views.py
    - templates
     - base.html
     - blogbase.html
from django.conf.urls import url
from django.contrib import admin
from django.views.generic import TemplateView

from .views import (
    home,
    post_list,
    post_create,
    post_detail,
    post_update,
    post_delete,
    )

urlpatterns = [
    url(r'^$', home),
    url(r'^blog$', post_list, name='list'),
    url(r'^blog/create/$', post_create),
    url(r'^blog/(?P<slug>[\w-]+)/$', post_detail, name='detail'),
    url(r'^blog/(?P<slug>[\w-]+)/edit/$', post_update, name='update'),
    url(r'^blog/(?P<slug>[\w-]+)/delete/$', post_delete),
    #url(r'^posts/$', "<appname>.views.<function_name>"),
]
from django.shortcuts import render

from django.http import HttpResponse
from django.views.generic import View
from django.views.generic.base import TemplateView, TemplateResponseMixin, ContextMixin


from posts.models import Post
from content.models import Content

class DashboardTemplateView(TemplateView):
    template_name = "base.html"
    context_object_name = 'name'

    def get_context_data(self, *args, **kwargs):
        context = super(DashboardTemplateView,self).get_context_data(*args, **kwargs)
        context["title"] = "This is about us"
        return context

class MyView(ContextMixin, TemplateResponseMixin, View):
    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        # mission_statement = Content.objects.filter(Content.objects.title == 'test')
        # context = {'mission_statement' : mission_statement,
        #           'content_list' : Content.objects.all(),
        #           'post_list' : Post.objects.all()}
        context = {'content_list' : Content.objects.all(), 'post_list':Post.objects.all()}
        return self.render_to_response(context)
try:
    from urllib import quote_plus #python 2
except:
    pass

try:
    from urllib.parse import quote_plus #python 3
except: 
    pass

from django.contrib import messages
from django.contrib.contenttypes.models import ContentType
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone

from comments.forms import CommentForm
from comments.models import Comment
from .forms import PostForm
from .models import Post



def post_create(request):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404

    form = PostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.user = request.user
        instance.save()
        # message success
        messages.success(request, "Successfully Created")
        return HttpResponseRedirect(instance.get_absolute_url())
    context = {
        "form": form,
    }
    return render(request, "post_form.html", context)

def post_detail(request, slug=None):
    instance = get_object_or_404(Post, slug=slug)
    if instance.publish > timezone.now().date() or instance.draft:
        if not request.user.is_staff or not request.user.is_superuser:
            raise Http404
    share_string = quote_plus(instance.content)

    initial_data = {
            "content_type": instance.get_content_type,
            "object_id": instance.id
    }
    form = CommentForm(request.POST or None, initial=initial_data)
    if form.is_valid() and request.user.is_authenticated():
        c_type = form.cleaned_data.get("content_type")
        content_type = ContentType.objects.get(model=c_type)
        obj_id = form.cleaned_data.get('object_id')
        content_data = form.cleaned_data.get("content")
        parent_obj = None
        try:
            parent_id = int(request.POST.get("parent_id"))
        except:
            parent_id = None

        if parent_id:
            parent_qs = Comment.objects.filter(id=parent_id)
            if parent_qs.exists() and parent_qs.count() == 1:
                parent_obj = parent_qs.first()


        new_comment, created = Comment.objects.get_or_create(
                            user = request.user,
                            content_type= content_type,
                            object_id = obj_id,
                            content = content_data,
                            parent = parent_obj,
                        )
        return HttpResponseRedirect(new_comment.content_object.get_absolute_url())


    comments = instance.comments
    context = {
        "title": instance.title,
        "instance": instance,
        "share_string": share_string,
        "comments": comments,
        "comment_form":form,
    }
    return render(request, "post_detail.html", context)

def post_list(request):
    today = timezone.now().date()
    queryset_list = Post.objects.active() #.order_by("-timestamp")
    if request.user.is_staff or request.user.is_superuser:
        queryset_list = Post.objects.all()

    query = request.GET.get("q")
    if query:
        queryset_list = queryset_list.filter(
                Q(title__icontains=query)|
                Q(content__icontains=query)|
                Q(user__first_name__icontains=query) |
                Q(user__last_name__icontains=query)
                ).distinct()
    paginator = Paginator(queryset_list, 8) # Show 25 contacts per page
    page_request_var = "page"
    page = request.GET.get(page_request_var)
    try:
        queryset = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        queryset = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        queryset = paginator.page(paginator.num_pages)


    context = {
        "object_list": queryset, 
        "title": "List",
        "page_request_var": page_request_var,
        "today": today,
    }
    return render(request, "post_list.html", context)


def post_update(request, slug=None):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404
    instance = get_object_or_404(Post, slug=slug)
    form = PostForm(request.POST or None, request.FILES or None, instance=instance)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        messages.success(request, "<a href='#'>Item</a> Saved", extra_tags='html_safe')
        return HttpResponseRedirect(instance.get_absolute_url())

    context = {
        "title": instance.title,
        "instance": instance,
        "form":form,
    }
    return render(request, "post_form.html", context)



def post_delete(request, slug=None):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404
    instance = get_object_or_404(Post, slug=slug)
    instance.delete()
    messages.success(request, "Successfully deleted")
    return redirect("posts:list")

def home(request, slug=None):
    today = timezone.now().date()
    queryset_list = Post.objects.active()[:1] #.order_by("-timestamp")
    if request.user.is_staff or request.user.is_superuser:
        queryset_list = Post.objects.all()[:1]

    query = request.GET.get("q")
    if query:
        queryset_list = queryset_list.filter(
                Q(title__icontains=query)|
                Q(content__icontains=query)|
                Q(user__first_name__icontains=query) |
                Q(user__last_name__icontains=query)
                ).distinct()
    paginator = Paginator(queryset_list, 8) # Show 25 contacts per page
    page_request_var = "page"
    page = request.GET.get(page_request_var)
    try:
        queryset = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        queryset = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        queryset = paginator.page(paginator.num_pages)


    context = {
        "object_list": queryset, 
        "title": "List",
        "page_request_var": page_request_var,
        "today": today,
    }
    return render(request, "base.html", context)
myurls.py-main如下所示

from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin
from django.db import models
from django.views.generic import ListView

from django.views.generic import TemplateView

from accounts.views import (login_view, register_view, logout_view)
# from main.views import MyView
from views import MyView

from posts.views import (
    home,
    post_list,
    post_create,
    post_detail,
    post_update,
    post_delete,
    )

urlpatterns = [

    url(r'^admin/', admin.site.urls),
    url(r'^comments/', include("comments.urls", namespace='comments')),

    url(r'^register/', register_view, name='register'),
    url(r'^login/', login_view, name='login'),
    url(r'^logout/', logout_view, name='logout'),
    url(r'^$', MyView.as_view(template_name=('base.html')), name='name'),
    # url(r'^$', home),
    url(r'^blog$', post_list, name='list'),
    url(r'^blog/create/$', post_create),
    url(r'^blog/(?P<slug>[\w-]+)/$', post_detail, name='detail'),
    url(r'^blog/(?P<slug>[\w-]+)/edit/$', post_update, name='update'),
    url(r'^blog/(?P<slug>[\w-]+)/delete/$', post_delete),


    # url(r'^', include("posts.urls", namespace='posts')),
    #url(r'^posts/$', "<appname>.views.<function_name>"),
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
{% extends "blogbase.html" %}
{% block content %}



<div class='col-sm-6 col-sm-offset-3'>
    <h1>Posts</h1>
    <form method='GET' action='' class='row'>
            <div class='col-sm-6'>
                <div class='input-group'>
                    <input class='form-control' type='text' name='q' placeholder='Search posts' value='{{ request.GET.q }}'/>
                    <span class='input-group-btn'>
                        <!-- <input class='btn btn-default' type='submit' value='Search' /> -->
                        <button class='btn btn-default' type='submit'>Search <i class="fa fa-search"></i></button>
                    </span>
                </div>
            </div>
    </form>
    {% for obj in object_list %}
    <div class="row">
      <div class="col-sm-12">
        <div class="thumbnail">
            {% if obj.image %}
             <img src='{{ obj.image.url }}' class='img-responsive' />
            {% endif %}
          <div class="caption post-detail-item">
            {% if obj.draft %}<h3>Staff only: Draft</h3>{% endif %} {% if obj.publish > today %}<h3>Staff Only: Future Post</h3>{% endif %}
            <h3><a href='{{ obj.get_absolute_url }}'>{{ obj.title }}</a> <small>{{ obj.publish }}</small></h3>
            {% if obj.user.get_full_name %}<p>Author: {{ obj.user.get_full_name }}</p>{% endif %}
            {{ obj.get_markdown|truncatechars_html:120 }}
            <p><a href="{{ obj.get_absolute_url }}" class="btn btn-primary" role="button">View</a></p>
          </div>
        </div>
      </div>
    <hr/>
</div>
{% endfor %}


<div class="pagination">
    <span class="step-links">
        {% if object_list.has_previous %}
            <a href="?{{ page_request_var }}={{ object_list.previous_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ object_list.number }} of {{ object_list.paginator.num_pages }}.
        </span>

        {% if object_list.has_next %}
            <a href="?{{ page_request_var }}={{ object_list.next_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">next</a>
        {% endif %}
    </span>
</div>

</div>

{% endblock content %}
from __future__ import unicode_literals

from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import reverse
from django.db import models
from django.db.models.signals import pre_save
from django.utils import timezone
from django.utils.safestring import mark_safe
from django.utils.text import slugify


from markdown_deux import markdown
from comments.models import Comment

from .utils import get_read_time
# Create your models here.
# MVC MODEL VIEW CONTROLLER


#Post.objects.all()
#Post.objects.create(user=user, title="Some time")

class PostManager(models.Manager):
    def active(self, *args, **kwargs):
        # Post.objects.all() = super(PostManager, self).all()
        return super(PostManager, self).filter(draft=False).filter(publish__lte=timezone.now())


def upload_location(instance, filename):
    #filebase, extension = filename.split(".")
    #return "%s/%s.%s" %(instance.id, instance.id, extension)
    PostModel = instance.__class__
    new_id = PostModel.objects.order_by("id").last().id + 1
    """
    instance.__class__ gets the model Post. We must use this method because the model is defined below.
    Then create a queryset ordered by the "id"s of each object, 
    Then we get the last object in the queryset with `.last()`
    Which will give us the most recently created Model instance
    We add 1 to it, so we get what should be the same id as the the post we are creating.
    """
    return "%s/%s" %(new_id, filename)

class Post(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    title = models.CharField(max_length=120)
    slug = models.SlugField(unique=True)
    image = models.ImageField(upload_to=upload_location, 
            null=True, 
            blank=True, 
            width_field="width_field", 
            height_field="height_field")
    height_field = models.IntegerField(default=0)
    width_field = models.IntegerField(default=0)
    content = models.TextField()
    draft = models.BooleanField(default=False)
    publish = models.DateField(auto_now=False, auto_now_add=False)
    read_time =  models.IntegerField(default=0) # models.TimeField(null=True, blank=True) #assume minutes
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

    objects = PostManager()

    def __unicode__(self):
        return self.title

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("posts:detail", kwargs={"slug": self.slug})

    class Meta:
        ordering = ["-timestamp", "-updated"]

    def get_markdown(self):
        content = self.content
        markdown_text = markdown(content)
        return mark_safe(markdown_text)

    @property
    def comments(self):
        instance = self
        qs = Comment.objects.filter_by_instance(instance)
        return qs

    @property
    def get_content_type(self):
        instance = self
        content_type = ContentType.objects.get_for_model(instance.__class__)
        return content_type


def create_slug(instance, new_slug=None):
    slug = slugify(instance.title)
    if new_slug is not None:
        slug = new_slug
    qs = Post.objects.filter(slug=slug).order_by("-id")
    exists = qs.exists()
    if exists:
        new_slug = "%s-%s" %(slug, qs.first().id)
        return create_slug(instance, new_slug=new_slug)
    return slug


def pre_save_post_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = create_slug(instance)

    if instance.content:
        html_string = instance.get_markdown()
        read_time_var = get_read_time(html_string)
        instance.read_time = read_time_var


pre_save.connect(pre_save_post_receiver, sender=Post)
my views.py-帖子如下:

 - src [Folder] 
   - content [Folder]
     - migrations [Folder]
     - __init__.py
     - admin.py
     - apps.py
     - models.py
     - tests.py
     - views.py
  - main [Folder]
     - settings [Folder]
         - __init__.py
         - base.py
     - migrations [Folder]
     - __init__.py
     - db.sqlite3
     - models.py
     - urls.py
     - views.py
     - wsgi.py
  - posts [Folder]
     - migrations [Folder]
     - templatetags [Folder]
     - __init__.py
     - admin.py
     - apps.py
     - forms.py
     - models.py
     - tests.py
     - urls.py
     - utils.py
     - views.py
    - templates
     - base.html
     - blogbase.html
from django.conf.urls import url
from django.contrib import admin
from django.views.generic import TemplateView

from .views import (
    home,
    post_list,
    post_create,
    post_detail,
    post_update,
    post_delete,
    )

urlpatterns = [
    url(r'^$', home),
    url(r'^blog$', post_list, name='list'),
    url(r'^blog/create/$', post_create),
    url(r'^blog/(?P<slug>[\w-]+)/$', post_detail, name='detail'),
    url(r'^blog/(?P<slug>[\w-]+)/edit/$', post_update, name='update'),
    url(r'^blog/(?P<slug>[\w-]+)/delete/$', post_delete),
    #url(r'^posts/$', "<appname>.views.<function_name>"),
]
from django.shortcuts import render

from django.http import HttpResponse
from django.views.generic import View
from django.views.generic.base import TemplateView, TemplateResponseMixin, ContextMixin


from posts.models import Post
from content.models import Content

class DashboardTemplateView(TemplateView):
    template_name = "base.html"
    context_object_name = 'name'

    def get_context_data(self, *args, **kwargs):
        context = super(DashboardTemplateView,self).get_context_data(*args, **kwargs)
        context["title"] = "This is about us"
        return context

class MyView(ContextMixin, TemplateResponseMixin, View):
    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        # mission_statement = Content.objects.filter(Content.objects.title == 'test')
        # context = {'mission_statement' : mission_statement,
        #           'content_list' : Content.objects.all(),
        #           'post_list' : Post.objects.all()}
        context = {'content_list' : Content.objects.all(), 'post_list':Post.objects.all()}
        return self.render_to_response(context)
try:
    from urllib import quote_plus #python 2
except:
    pass

try:
    from urllib.parse import quote_plus #python 3
except: 
    pass

from django.contrib import messages
from django.contrib.contenttypes.models import ContentType
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone

from comments.forms import CommentForm
from comments.models import Comment
from .forms import PostForm
from .models import Post



def post_create(request):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404

    form = PostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.user = request.user
        instance.save()
        # message success
        messages.success(request, "Successfully Created")
        return HttpResponseRedirect(instance.get_absolute_url())
    context = {
        "form": form,
    }
    return render(request, "post_form.html", context)

def post_detail(request, slug=None):
    instance = get_object_or_404(Post, slug=slug)
    if instance.publish > timezone.now().date() or instance.draft:
        if not request.user.is_staff or not request.user.is_superuser:
            raise Http404
    share_string = quote_plus(instance.content)

    initial_data = {
            "content_type": instance.get_content_type,
            "object_id": instance.id
    }
    form = CommentForm(request.POST or None, initial=initial_data)
    if form.is_valid() and request.user.is_authenticated():
        c_type = form.cleaned_data.get("content_type")
        content_type = ContentType.objects.get(model=c_type)
        obj_id = form.cleaned_data.get('object_id')
        content_data = form.cleaned_data.get("content")
        parent_obj = None
        try:
            parent_id = int(request.POST.get("parent_id"))
        except:
            parent_id = None

        if parent_id:
            parent_qs = Comment.objects.filter(id=parent_id)
            if parent_qs.exists() and parent_qs.count() == 1:
                parent_obj = parent_qs.first()


        new_comment, created = Comment.objects.get_or_create(
                            user = request.user,
                            content_type= content_type,
                            object_id = obj_id,
                            content = content_data,
                            parent = parent_obj,
                        )
        return HttpResponseRedirect(new_comment.content_object.get_absolute_url())


    comments = instance.comments
    context = {
        "title": instance.title,
        "instance": instance,
        "share_string": share_string,
        "comments": comments,
        "comment_form":form,
    }
    return render(request, "post_detail.html", context)

def post_list(request):
    today = timezone.now().date()
    queryset_list = Post.objects.active() #.order_by("-timestamp")
    if request.user.is_staff or request.user.is_superuser:
        queryset_list = Post.objects.all()

    query = request.GET.get("q")
    if query:
        queryset_list = queryset_list.filter(
                Q(title__icontains=query)|
                Q(content__icontains=query)|
                Q(user__first_name__icontains=query) |
                Q(user__last_name__icontains=query)
                ).distinct()
    paginator = Paginator(queryset_list, 8) # Show 25 contacts per page
    page_request_var = "page"
    page = request.GET.get(page_request_var)
    try:
        queryset = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        queryset = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        queryset = paginator.page(paginator.num_pages)


    context = {
        "object_list": queryset, 
        "title": "List",
        "page_request_var": page_request_var,
        "today": today,
    }
    return render(request, "post_list.html", context)


def post_update(request, slug=None):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404
    instance = get_object_or_404(Post, slug=slug)
    form = PostForm(request.POST or None, request.FILES or None, instance=instance)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        messages.success(request, "<a href='#'>Item</a> Saved", extra_tags='html_safe')
        return HttpResponseRedirect(instance.get_absolute_url())

    context = {
        "title": instance.title,
        "instance": instance,
        "form":form,
    }
    return render(request, "post_form.html", context)



def post_delete(request, slug=None):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404
    instance = get_object_or_404(Post, slug=slug)
    instance.delete()
    messages.success(request, "Successfully deleted")
    return redirect("posts:list")

def home(request, slug=None):
    today = timezone.now().date()
    queryset_list = Post.objects.active()[:1] #.order_by("-timestamp")
    if request.user.is_staff or request.user.is_superuser:
        queryset_list = Post.objects.all()[:1]

    query = request.GET.get("q")
    if query:
        queryset_list = queryset_list.filter(
                Q(title__icontains=query)|
                Q(content__icontains=query)|
                Q(user__first_name__icontains=query) |
                Q(user__last_name__icontains=query)
                ).distinct()
    paginator = Paginator(queryset_list, 8) # Show 25 contacts per page
    page_request_var = "page"
    page = request.GET.get(page_request_var)
    try:
        queryset = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        queryset = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        queryset = paginator.page(paginator.num_pages)


    context = {
        "object_list": queryset, 
        "title": "List",
        "page_request_var": page_request_var,
        "today": today,
    }
    return render(request, "base.html", context)

非常感谢您的帮助。提前谢谢您!

事实上,
posts
似乎不是一个注册的名称空间,因为您决定将它们复制到主urlconf,而不是包含
posts.url

取消对以下行的注释并从主urlconf中删除重复的URL可以解决名称空间的问题

url(r'^', include("posts.urls", namespace='posts'))
但是,通过这种方式,您将在
/
上挂载两个视图,因此您需要确定哪一个是正确的视图


您提供的代码并不清楚,但我认为问题可能发生在
Post.get\u absolute\u url()中
如果您在那里调用
reverse
来为
Post
构建完整的URL,那么
posts
似乎不是一个注册的命名空间,因为您决定将它们复制到主urlconf,而不是包含
posts.URL

取消对以下行的注释并从主urlconf中删除重复的URL可以解决名称空间的问题

url(r'^', include("posts.urls", namespace='posts'))
但是,通过这种方式,您将在
/
上挂载两个视图,因此您需要确定哪一个是正确的视图



您提供的代码并不清楚,但我认为问题可能发生在
Post.get\u absolute\u url()中
如果您正在调用
reverse
在那里为
Post

发布Post\u list.htmlDone构建完整的URL。感谢您的帮助在模板中哪里提供了删除选项?它在blogbase.html中吗?您可以显示您在哪里使用过它/blog/slug/delete删除Post\u list.htmlDone。感谢帮助Ping模板中的删除选项在哪里?是否在blogbase.html中?能否显示您在哪里使用它/blog/slug/delete删除帖子谢谢您取消注释这确实返回了/blog、/blog/create、/blog/edit。我不完全理解为什么会这样,因为根据我的理解,这行添加了that into my views.py-main:context={'content_list':content.objects.all(),'post_list':post.objects.all()}您介意解释一下吗?这是两件不同的事情(如果我理解您的评论的话)。您首先需要将视图装载到urlconf中,使其在特定url下可见。否则,您无法从浏览器访问视图,也无法使用
reverse
url
模板标记“动态”构建url,因为Django不知道它们是什么。另一方面,上下文只返回一组variab对于你的模板,这些可以有任何价值-例如,Querysets(就像你的例子一样)。希望这有帮助:)非常感谢。这肯定会有帮助。
post_list
提供的不仅仅是
MyView
——分页和简单的文本搜索。如果您对
models.py
有不同的问题,那么只需添加一个新问题,精确解释它是什么。如果问题定义得很好,那么可以说它们对其他遇到类似问题的人更有帮助。(对我来说)您的模型文件可能有什么问题尚不清楚。感谢您取消注释,该文件确实返回了/blog、/blog/create、/blog/edit。但是,我不完全理解为什么会这样,因为根据我的理解,这一行将其添加到了我的views.py-main:context={'content_list':content.objects.all(),'post_list':post.objects.all()}您介意解释一下吗?这是两件不同的事情(如果我理解您的评论的话)。首先需要在urlconf中装载视图,以使它们在特定url下可见。否则,您无法从浏览器访问它,也无法使用
reverse
url
模板标记“动态”构建url,因为Django不知道它们是什么。另一方面,上下文只向模板返回一组变量,这些变量可以有任何值——例如,Querysets(如您的示例所示)。希望这有帮助:)非常感谢。这肯定会有帮助。
post_list
提供的不仅仅是
MyView
——分页和简单的文本搜索。如果您对
models.py
有不同的问题,那么只需添加一个新问题,精确解释它是什么。如果问题定义得很好,那么可以说它们对其他遇到类似问题的人更有帮助。(对我来说)你的模型文件可能有什么问题还不清楚。