首页 文章

Django:ValueError对于带有基数10的int()的无效文字

提问于
浏览
0

我有两个型号 PostCategory .

models.py

class Post(models.Model):
    title = models.CharField(max_length=100, unique=True)
    slug = models.SlugField(max_length=100, unique=True)
    content = models.TextField()
    posted = models.DateField(db_index=True, auto_now_add=True)
    category = models.ForeignKey('blog.Category')

    def __unicode__(self):
        return '%s' % self.title


class Category(models.Model):
    title = models.CharField(max_length=100, db_index=True)
    slug = models.SlugField(max_length=100, db_index=True)

    def __unicode__(self):
        return '%s' % self.title

views.py

def post_view(request, slug, slug1):
    return render(request, 'post_view.html', {
        'post': get_object_or_404(Post, category=slug, slug=slug1)
    })


def category_view(request, slug):
    category = get_object_or_404(Category, slug=slug)
    return render(request, 'cat_view.html', {
        'category': category,
        'posts': Post.objects.filter()[:5]
    })

urls.py

url(r'category/(?P<slug>[-\w]+)/$', views.category_view, name='cat_view'),
    url(r'category/(?P<slug>[-\w]+)/(?P<slug1>[-\w]+)/$', views.post_view, name='post_view'),

最后是模板category.html

{% block content %}

    {% if posts %}
        <ul>
            {% for post in posts %}
                <li><a href="{% url 'blog:post_view' slug=post.category slug1=post.slug %}">
                    {{ post.title }}</a></li>
            {% endfor %}
        </ul>
    {% else %}
        <p>There are no post yet in the {{ category.title }} category ! </p>
    {% endif %}

{% endblock %}

post.html

{% block content %}
    <h1>{{ post.title }}</h1>
    <p>{{ post.content }}</p>
    <small>{{ post.posted }}</small>

{% endblock %}

每当我尝试通过 category.html 上的链接访问特定帖子时,就会出现错误 . 起初我认为这是因为 urls.py 中的正则表达式,但它似乎是查询的问题,我已经坚持了几个小时 . 任何帮助都会很棒 .

UPDATE

回溯:文件“C:\ Python27 \ lib \ site-packages \ django \ core \ handlers \ exception.py”在内部39. response = get_response(request)文件“C:\ Python27 \ lib \ site-packages \ django / core \ handlers \ base.py“in _get_response 187. response = self.process_exception_by_middleware(e,request)_get_response 185中的文件”C:\ Python27 \ lib \ site-packages \ django \ core \ handlers \ base.py“ . response = wrapped_callback(request,* callback_args,** callback_kwargs)post_view 25中的文件“C:\ Users \ godfather \ PycharmProjects \ portfolio \ blog \ views.py”.'post':get_object_or_404(Post,category = slug,slug = slug1)get_object_or_404中的文件“C:\ Python27 \ lib \ site-packages \ django \ shortcuts.py”85 . return queryset.get(* args,** kwargs)文件“C:\ Python27 \ lib \ site-packages \获取376中的django \ db \ models \ query.py“.clone = self.filter(* args,** kwargs)文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ query.py“在过滤器796中 . 返回self.filter_or_exclude(False,* args,** kwargs)文件“C:\ Python27 \ lib \ site-packages \ django \ db \ models \ que ry.py“在_filter_or_exclude 814. clone.query.add_q(Q(* args,** kwargs))文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ sql \ query.py“in add_q 1227. clause, = self._add_q(q_object,self.used_aliases)_add_q 1253中的文件“C:\ Python27 \ lib \ site-packages \ django \ db \ models \ sql \ query.py” . allow_joins = allow_joins, split_subq = split_subq,build_filter 1183中的文件“C:\ Python27 \ lib \ site-packages \ django \ db \ models \ sql \ query.py”.condition = lookup_class(lhs,value)文件“C:\ Python27 \ lib \ init-self中的site-packages \ django \ db \ models \ lookups.py“self.rhs = self.get_prep_lookup()文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ fields \ related_lookups . py“in get_prep_lookup 100. self.rhs = target_field.get_prep_value(self.rhs)文件”C:\ Python27 \ lib \ site-packages \ django \ db \ models \ fields__init __ . py“in get_prep_value 946. return int(value)异常类型:ValueError at / category / Computer / python-data-scientists / Exception Value:int()的文字无效,基数为10:'计算机'

1 回答

  • 0

    在模板中,您将类别作为对象传递,而不是类别slug . 以下是您需要更改的内容:

    {% url 'blog:post_view' slug=post.category.slug slug1=post.slug %}

    我会更进一步,重命名一些东西 . 在你的 urls.py 中更改第二个网址:

    url(r'category/(?P<category_slug>[-\w]+)/(?P<post_slug>[-\w]+)/$', views.post_view, name='post_view'),

    然后调整 views.py 以反映更改:

    def post_view(request, category_slug, post_slug): return render(request, 'post_view.html', { 'post': get_object_or_404(Post, category__slug=category_slug, slug=post_slug) })

    请注意双下划线 . 这不是一个错字 .

    命名很重要,特别是对于阅读代码的其他人 . slug和slug1的概念不是很具描述性 . 最好清楚哪一个是类别slug,哪一个是post slug .

    如果您使用上述更改,那么您应该调整此行:

    {% url 'blog:post_view' category_slug=post.category.slug post_slug=post.slug %}

相关问题