我在使用带有 slug 字段的 get_absolute_url 时遇到错误。已尝试了一些堆栈中已存在但不起作用的建议。任何人都可以帮我解决这个问题吗? Please refer this link for traceback.
模型.py
模型中的代码。
from django.urls import reverse
class Post(models.Model):
title = models.CharField(max_length=50)
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE)
draft = models.BooleanField(default=False)
publish = models.DateTimeField(auto_now=False, auto_now_add=False)
slug = models.SlugField(unique=True)
image = models.ImageField(upload_to=upload_location,
null=True,
blank=True,
width_field="width_field",
height_field="hieght_field")
hieght_field = models.IntegerField(default=0)
width_field = models.IntegerField(default=0)
content = models.TextField()
updates = models.DateTimeField(auto_now=True, auto_now_add=False)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
def get_absolute_url(self):
return reverse('post:detail', kwargs={'slug':self.slug})
View .py
View 中的代码。
def post_list(request):
queryset_list = Post.objects.active()
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.filter(
Q(title__icontains=query)
).distinct()
context = {
'object_list':queryset_list,
'posts': page,
"page_request_var": page_request_var,
}
return render(request, 'index.html', context)
urls.py
url 映射。
urlpatterns = [
path('detail/<slug:slug>/', views.detail, name='detail'),
]
html页面
index.html 中的代码
{% for obj in object_list %}
<div class="container">
<p class="card-text">{{obj.content|linebreaks|truncatechars:120}}</p>
<a href="{{obj.get_absolute_url}}" class="btn btn-primary">View</a>
<!-- <a href="{% url 'post:detail' pk=obj.id %}"> {{obj.title}} </a> -->
</div>
{% endfor %}
最佳答案
由于index.html中的注释行而发生错误<a href="{% url 'post:detail' pk=obj.id %}"> {{obj.title}} </a>
删除此行后,页面将完美加载,并且在详细信息 View 中应将“pk”替换为工作详细信息页面的 slug。 def detail(request,slug): #slug replaced pk
关于python - 使用 slug 字段找不到反向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634189/