网址

时间:2018-02-08 15:10:21

标签: python django

Django框架的新手。主要是通过文档阅读。 但是这个我无法破解。

尝试在标题中添加网址,该网址会转发到“标题”帖子。

错误:

  

NoReverseMatch at / Reverse为'assignment_detail'带参数   '('',)' 未找到。尝试过1种模式:['assignment_detail /']请求   方法:GET请求URL:http://127.0.0.1:8000/ Django版本:2.0.2   异常类型:NoReverseMatch异常值:反向   找不到带有参数'('',)'的'assignment_detail'。 1种模式   尝试过:['assignment_detail /']例外   位置:C:\ Users \ internit \ Dropbox \ Python \ codepython \ env \ lib \ site-packages \ django \ urls \ resolvers.py   在_reverse_with_prefix中,第632行Python   可执行文件:C:\ Users \ internit \ Dropbox \ Python \ codepython \ env \ Scripts \ python.exe   Python版本:3.6.2 Python路径:
  [ 'C:\用户\ internit \收存箱\的Python \ codepython \ codepython',   'C:\用户\ internit \收存箱\的Python \ codepython \ ENV \脚本\ python36.zip',   'C:\用户\ internit \收存箱\的Python \ codepython \ ENV \的DLL',   'C:\用户\ internit \收存箱\的Python \ codepython \ ENV \ lib中',   'C:\用户\ internit \收存箱\的Python \ codepython \ ENV \脚本',   'c:\ program files(x86)\ python36-32 \ Lib','c:\ program files   (86)\ python36-32 \的DLL,   'C:\用户\ internit \收存箱\的Python \ codepython \ ENV',   'C:\用户\ internit \ Dropbox的\ Python的\ codepython \ ENV \ LIB \站点包']   服务器时间:2018年2月8日星期四14:53:07 +0000模板期间出错   渲染在模板中   C:\ Users \用户internit \ Dropbox的\ Python的\ codepython \ codepython \ codepython \模板\ base.html文件,   第0行的错误

     

使用参数'('',)找不到'assignment_detail'的反转。 1   模式尝试:['assignment_detail /'] 1 {%load static%}   2 3 4 5 6 7 8 9 10 CODEPYTHON.NET   回溯切换到复制粘贴视图   C:\ Users \用户internit \ Dropbox的\ Python的\ codepython \ ENV \ LIB \站点包\ Django的\核心\处理器\ exception.py   在内心               response = get_response(request)...▶本地变量C:\ Users \ internit \ Dropbox \ Python \ codepython \ env \ lib \ site-packages \ django \ core \ handlers \ base.py   在_get_response中                   response = self.process_exception_by_middleware(e,request)...▶本地变量   C:\ Users \用户internit \ Dropbox的\ Python的\ codepython \ ENV \ LIB \站点包\ Django的\核心\处理器\ base.py   在_get_response中                   response = wrapped_callback(request,* callback_args,** callback_kwargs)...▶本地变量C:\ Users \ internit \ Dropbox \ Python \ codepython \ codepython \ home \ views.py   在家       return render(request,'home.html',{'post':post})...▶Local vars

家/ urls.py

from django.conf.urls import url
from django.conf import settings
from django.conf.urls.static import static
from codepython.posts import views
from posts import views as ps


app_name ='home'

urlpatterns = [
    url(r'^$/', views.create, name='create'),
    url(r'(?P<pk>\d+)/$', views.home, name='home'),
    url(r'(?P<pk>\d+)/$', views.userposts, name='userposts')
    url(r'^posts/(?P<post_id>[0-9]+)/$', ps.assignment_detail, name='assignment_detail'),


]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

家/ views.py

from django.shortcuts import render, get_object_or_404
from django.apps import apps


# Create your views here.

def home(request):
    posts = apps.get_model("posts", "Post")
    post = posts.objects.all().order_by('-pub_date')[0:6]

    return render(request, 'home.html', {'post':post})

def assignment_detail(request, post_id):
    posts = apps.get_model('posts', 'Post')
    post = get_object_or_404(posts, pk=post_id)

    return render(request, "assignment_detail.html", {'post': post})

home.html的

<div class="row">
    {% for post in post.all %}
        <div class="col-md-4">
            <div class="thumbnail">

                <div class="caption">
                    <p>Level: {{post.assignment_level}}</p>
                    <a href="{% url 'assignment_detail' post_id %}"><h3>{{ post.title }}</h3></a>
                    <p>by {{post.author}} from {{post.pub_date}}</p>
                    <h4>{{post.assignment_body}}</h4>

                    <p><a href="#" class="btn btn-primary" role="button">Read...</a></p>
                </div>
            </div>
        </div>
    {% endfor %}
</div>
{% endblock%}

的myproject / urls.py

url(r'^assignment_detail/', views.assignment_detail,name='assignment_detail'),

我在这里缺少什么。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您的网址并不意味着您必须传递ID,但是您在模板中传递了一个:

<a href="{% url 'assignment_detail' post_id %}"><h3>{{ post.title }}</h3></a>

应该是:

url(r'^assignment_detail/(?P<post_id>[0-9]+)', views.assignment_detail,name='assignment_detail'),

答案 1 :(得分:0)

这个错误是Django告诉你它找不到任何名为'assignment_detail'的URL,这些URL有一个参数可以传入。

这是因为myproject/urls.py中的您的网址条目缺少您在视图中使用的参数(post_id)。您需要将该网址行更新为与此类似的内容:

url(r'^assignment_detail/(?P<post_id>[0-9]+)/$', views.assignment_detail, name='assignment_detail'),

URL末尾的更改会添加一个命名的正则表达式来捕获post_id值,然后将该值传递到视图中。

查看模板代码,您需要更新{%url%}块以使用post.id(通知期限)而不是post_id