使用CreateView后需要帮助返回正确的URL

时间:2015-11-21 23:58:13

标签: python django url

提交表单后,我无法返回正确的网址。我可以通过将其指向索引页面来使其工作,但我希望它指向新创建的项目URL。例如,我希望网址看起来像这样:

www.example.com/username/project-slug

我已经尝试了大约5个小时而没有运气:-(。任何帮助都会非常感激!

视图

class CreateProject(CreateView):
    model = UserProject
    form_class = UserProjectForm
    template_name = 'howdidu/create_project.html'
    #success_url = "/"

    def form_valid(self, form):
        form.instance.user = self.request.user
        self.object = form.save()
        return super(CreateProject, self).form_valid(form)

    def get_success_url(self):
        return reverse_lazy('index')

网址

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<project_title_slug>[\w-]+)/$', views.project_page, name='user_project'),
        )

模型

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

项目网址

 url(r'^admin/', include(admin.site.urls)),
    url(r'', include('howdidu.urls')),
    url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), #redirects to home page after registration
    (r'^accounts/', include('registration.backends.simple.urls')),
    url(r'^(?P<username>\w+)/', include('howdidu.urls')), #do i need this?

1 个答案:

答案 0 :(得分:0)

您可以在get_success_url

中执行此操作
def get_success_url(self):
    username = self.kwargs.get('username', None)
    project_slug = self.kwargs.get('project_title_slug', None)
    return reverse('user_project', kwargs={
        'username': username,
        'project_title_slug': project_slug
    })

user_project是网址的名称,但我不知道这是否是您需要匹配的网址。 根据您的网址定义更改您需要的任何内容