【问题标题】:get_absolute_url doesn't load the pageget_absolute_url 不加载页面
【发布时间】:2016-04-06 05:57:19
【问题描述】:

因此,我正在尝试编写博客代码并为每篇文章设置一个特殊页面,并且我有 blog.html(博客的主页),其中包含“阅读更多”按钮。

<a class = "Read" href="{{ post.get_absolute_url }}">Read more...</a>

我还有另一个文件post.html,它是每个文章页面的基本模板。 Post 模型有 slug 字段,urls.py 是这样的:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.front, name='front'),
    url(r'^blog/', views.blog, name='blog'),
    url(r'^contact/', views.contact, name='contact'),
    url(r'^blog/(?P<slug>[^\.]+)', views.page, name='post')
]

页面视图是这样的:

def page(request, slug):
    return render_to_response('home/post.html', {
        'post': get_object_or_404(Post, slug=slug)
    })

问题是当我按下阅读更多时没有任何反应,但我查看终端窗口,服务器将其作为请求并返回 200,这意味着成功,但页面没有加载。

编辑: Post 模型:

class Post(models.Model):
    title = models.CharField(max_length=100, default='')
    text = models.TextField(default='')
    slug = models.SlugField(default=uuid.uuid1, unique=True)
    status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='w')
    description = models.TextField(default='', max_length=300)
    creation_date = models.DateTimeField(auto_now_add=True, editable=False)

     def __unicode__(self):
       return self.title

     def edit_text(self, text):
         self.text = text

     class Meta:
          get_latest_by = 'creation_date

【问题讨论】:

  • Post 上的get_absolute_url 方法是什么样的?
  • 看代码,你还没有定义任何这样的方法,所以它不可能工作。如果您查看生成的 HTML,您无疑会看到 href 是空白的。这就是为什么单击链接只会将您带回到同一页面的原因。

标签: python django python-2.7 django-templates django-urls


【解决方案1】:

您是否为 Post Model 定义了get_absolute_url

from django.core.urlresolvers import reverse
from django.db import models

class Post(models.Model):
   #fields

   def get_absolute_url(self):
      return reverse('post', args=[self.slug])

【讨论】:

  • 它转到链接但它不加载模板。
  • 请使用url(r'^blog/(?P&lt;slug&gt;.*)/$', views.page, name='post') 告诉我它是否有效。你会分享你的 urls.py 吗?也许它被其他视图捕捉到了。
【解决方案2】:

这就是问题所在。 请尝试通过$关闭网址格式

urlpatterns = [
    url(r'^$', views.front, name='front'),
    url(r'^blog/$', views.blog, name='blog'),
    url(r'^contact/$', views.contact, name='contact'),
    url(r'^blog/((?P<slug>.*)/$', views.page, name='post')
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多