slug url 不会显示没有连字符的 url
slug url won't display url's that don't have hyphens
出于某种原因,我无法查看没有连字符的 slug 页面。例如:
这不起作用:
/例子1
这有效:
/这种方式有效
我尝试过更改正则表达式,但没有成功。任何帮助,将不胜感激!
网址
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^register_profile/$', views.register_profile, name='register_profile'),
url(r'^update_profile/$', views.update_profile, name='update_profile'),
url(r'^create_project/$', views.CreateProject.as_view(), name='create_project'),
url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),
url(r'^(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),
)
project_page 查看
def project_page(request, slug):
context_dict = {}
username = request.user.username
user = get_object_or_404(User, username=username)
context_dict['project_user'] = user
project = UserProject.objects.get(slug=slug)
context_dict['project'] = project
context_dict['project_title'] = project.title
return render(request, 'howdidu/project.html', context_dict)
型号
class UserProject(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=100)
project_overview = models.CharField(max_length=1000)
project_picture = models.ImageField(upload_to='project_images', blank=True)
date_created = models.DateTimeField(auto_now_add=True)
project_views = models.IntegerField(default=0)
project_likes = models.IntegerField(default=0)
project_followers = models.IntegerField(default=0)
slug = models.SlugField(max_length=100, unique=True) #should this be unique or not?
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(UserProject, self).save(*args, **kwargs)
def __unicode__(self):
return self.title
模板
{% extends 'howdidu/base.html' %}
{% load staticfiles %}
{% block title %}{{ profile_user.userprofile.first_name }} {{ profile_user.userprofile.second_name }}{% endblock %}
{% block body_block %}
<h1>{{ profile_user.userprofile.first_name }}'s profile page</h1>
<img src="{{ profile_user.userprofile.profile_picture.url }}" width = "150" height = "150" />
<h2>{{ profile_user.userprofile.first_name }} {{ profile_user.userprofile.second_name }}</h2>
<h2>{{ profile_user.userprofile.user_country }}</h2>
{% if projects %}
<ul>
{% for project in projects %}
<li><a href="{% url 'user_project' project.slug %}">{{ project.title }}</a></li>
{% endfor %}
</ul>
{% else %}
<strong>There are no projects present.</strong>
{% endif %}
{% if user.is_authenticated %}
{% if profile_user.username == user.username %}
<p><a href="{% url 'update_profile' %}">Edit profile</a></p>
<p><a href="{% url 'create_project' %}">Create new project</a></p>
{% endif %}
{% endif %}
{% endblock %}
问题出在您的 url 订单上。
url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),
url(r'^(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),
Django 在这些 url 中没有太大区别。 Django 将从上到下查找第一个匹配项。如果你的 slug 中有 -
,它将映射到
url(r'^(?P<slug>[-\w]+)/$', views.project_page, name='user_project')
因为它是唯一匹配 -
的 url。但是如果你的 slug 是 example1
link 将匹配
url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),
url 因为它更接近顶部。您需要做的是将另一个 'level' 添加到 url 中。例如:
url(r'^users/(?P<username>\w+)/$', views.profile_page, name='user_profile'),
url(r'^projects/(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),
那么一切都会好起来的。
P. S.
您的 url 不依赖于用户,所以实际上任何用户都可以看到所有项目,我认为这不是您 need.Think 的目的,如果您需要任何帮助,请问我。
出于某种原因,我无法查看没有连字符的 slug 页面。例如:
这不起作用: /例子1
这有效: /这种方式有效
我尝试过更改正则表达式,但没有成功。任何帮助,将不胜感激!
网址
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^register_profile/$', views.register_profile, name='register_profile'),
url(r'^update_profile/$', views.update_profile, name='update_profile'),
url(r'^create_project/$', views.CreateProject.as_view(), name='create_project'),
url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),
url(r'^(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),
)
project_page 查看
def project_page(request, slug):
context_dict = {}
username = request.user.username
user = get_object_or_404(User, username=username)
context_dict['project_user'] = user
project = UserProject.objects.get(slug=slug)
context_dict['project'] = project
context_dict['project_title'] = project.title
return render(request, 'howdidu/project.html', context_dict)
型号
class UserProject(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=100)
project_overview = models.CharField(max_length=1000)
project_picture = models.ImageField(upload_to='project_images', blank=True)
date_created = models.DateTimeField(auto_now_add=True)
project_views = models.IntegerField(default=0)
project_likes = models.IntegerField(default=0)
project_followers = models.IntegerField(default=0)
slug = models.SlugField(max_length=100, unique=True) #should this be unique or not?
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(UserProject, self).save(*args, **kwargs)
def __unicode__(self):
return self.title
模板
{% extends 'howdidu/base.html' %}
{% load staticfiles %}
{% block title %}{{ profile_user.userprofile.first_name }} {{ profile_user.userprofile.second_name }}{% endblock %}
{% block body_block %}
<h1>{{ profile_user.userprofile.first_name }}'s profile page</h1>
<img src="{{ profile_user.userprofile.profile_picture.url }}" width = "150" height = "150" />
<h2>{{ profile_user.userprofile.first_name }} {{ profile_user.userprofile.second_name }}</h2>
<h2>{{ profile_user.userprofile.user_country }}</h2>
{% if projects %}
<ul>
{% for project in projects %}
<li><a href="{% url 'user_project' project.slug %}">{{ project.title }}</a></li>
{% endfor %}
</ul>
{% else %}
<strong>There are no projects present.</strong>
{% endif %}
{% if user.is_authenticated %}
{% if profile_user.username == user.username %}
<p><a href="{% url 'update_profile' %}">Edit profile</a></p>
<p><a href="{% url 'create_project' %}">Create new project</a></p>
{% endif %}
{% endif %}
{% endblock %}
问题出在您的 url 订单上。
url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),
url(r'^(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),
Django 在这些 url 中没有太大区别。 Django 将从上到下查找第一个匹配项。如果你的 slug 中有 -
,它将映射到
url(r'^(?P<slug>[-\w]+)/$', views.project_page, name='user_project')
因为它是唯一匹配 -
的 url。但是如果你的 slug 是 example1
link 将匹配
url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),
url 因为它更接近顶部。您需要做的是将另一个 'level' 添加到 url 中。例如:
url(r'^users/(?P<username>\w+)/$', views.profile_page, name='user_profile'),
url(r'^projects/(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),
那么一切都会好起来的。
P. S. 您的 url 不依赖于用户,所以实际上任何用户都可以看到所有项目,我认为这不是您 need.Think 的目的,如果您需要任何帮助,请问我。