【问题标题】:Python method invovation , missing parameterPython 方法调用,缺少参数
【发布时间】:2016-07-26 17:33:30
【问题描述】:

您好,我正在尝试实现一个分析系统,以便在用户登录后立即识别学生并从学生模型中提取信息并将其返回到主页以及系统内的所有其他页面。它还将学生用户名附加到 URL 的末尾......希望

我收到此错误:

profile() 缺少 1 个必需的位置参数:“用户名”

网址.py

    # student urls.py
    # Import urls and patterns aswell as student views
    from django.conf.urls import patterns, url
    from student import views

    urlpatterns = patterns('',
    url(r'^(?P<username>[a-zA-Z0-9]+)$', views.index, name='index'),
    url(r'^$', views.profile, name='profile'))

模型.py

    # student models.py
    # Import the models db and validators
    # Also import user information for log in identification
    from django.db import models
    from django.core.validators import *
    from django.contrib.auth.models import User 

    # Specify attributes for the student database
    class student(models.Model):
    # Specify choices for years, gender and degree type
    YEARS = (
    ('1', '1st'),
    ('2', '2nd'),
    ('3', '3rd'),
    )
    GENDER = (
    ('M', 'Male'),
    ('F', 'Female'),
    )
    DEGREE = (
    ('IT', 'Information Technology'),
    ('CS', 'Computer Science'),
    )

    # Attributes for the student model specified here
    user = models.OneToOneField(User)
    student_ID = models.CharField(unique=True, max_length=9, validators=[RegexValidator(regex='^[0-9]{9,9}$', message='Must be 9 unique numbers', code='nomatch')])
    first_name = models.CharField(max_length=128)
    middle_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    gender = models.CharField(max_length=1, choices=GENDER)
    year = models.CharField(max_length=1, choices=YEARS)
    degree = models.CharField(max_length=2, choices=DEGREE)
    photo = models.ImageField(upload_to="profile_pictures", null=True, blank=True)

    def __str__(self):
            return self.student_ID

Views.py

    # student views.py
    # Import rendering and httpresponse
    # Also import student model
    from django.shortcuts import render
    from django.http import HttpResponse
    from student.models import student
    from extra_curricular.models import extra_curricular
    from module.models import module
    from skill.models import skill
    from django.contrib.auth.models import User

    # Information box displayed on each page  
    def index(request, username):
        user = User.objects.get(username=username)
        person = student.objects.get(user=user)
        return render(request, 'student/home.html', {"person":person})

    #Profile page information
    def profile(request, username):
         user = User.objects.get(username=username)
         person = student.objects.get(user=user)
         experience = extra_curricular.objects.get(user=user)
         module = module.objects.get(user=user)
         skill = skill.objects.get(user=user)
         return render(request, 'student/profile.html', {"person":person}, {"experience":experience}, {"module":module}, {"skill":skill})

主页.html

        {% block content %}
    <div class = "StudentInfoMain">


    </div>
    <div id="Options">
        <ul>
            <li><a href="/student/">Home</a></li>
            <li><a href="/extra_curricular/add_extra_curricular/">Add Information</a></li>
            <li><a href="#">View User Profile</a></li>
            <li><a href="#">Checklist</a></li>
            <li><a href="/skill/add_skill/">My Skills</a></li>
            <li><a href="/alumni/Find_Alumni/">Contact Alumni</a></li>
        </ul>
    </div>
    <div class = "Homebanner">
        <p>{{ user.username }}</p>
        <p>{{ person.student_ID }}</p>
        <p>{{ person.first_name}}</p>
        <p>{{ person.last_name }}</p>
        <p>{{ person.year }}</p>
        <p>{{ person.degree }}</p>

    </div>
    <div id = "Homebody">
    <p>Hello {{person.first_name}</p>
    <p>Welcome to your E-Profile</p>
    <br>
    <p>This application is intended as an aid to you during your employment endeavours.</p>
    <p>It can be used during the process of building a curriculum vitae</p>
    <p>You may add information of experiences you have had during your educational career</p>
    <br>
    <p>For any further information: </p>
    <br>


    </div>


    <footer>

    </footer>
    {% endblock %}

【问题讨论】:

    标签: python django django-models django-views django-urls


    【解决方案1】:
    def profile(request, username):    
    

    views.profile 带有一个额外的参数以及您尚未通过的请求。

    url(r'^$', views.profile, name='profile')
    

    【讨论】:

    • 抱歉,我不是这方面的佼佼者。我该把这个论点传到哪里去?
    【解决方案2】:

    您的profile 视图需要username 参数,但您的URL 结构没有定义它。换行

    url(r'^$', views.profile, name='profile'))
    

    类似

    url(r'^profile/(?P<username>[\w\d]+)/$', views.profile, name='profile'))
    

    添加了开头的profile 部分以将其与您的index URL 区分开来。

    【讨论】:

    • 您好,感谢您的帮助。我现在收到一个找不到页面的错误,我确定这与我将用户名附加到 url 的末尾有关
    • 您要测试的 URL 是什么?你如何传递用户名?
    • 网址测试:url(r'^(?P[a-zA-Z0-9]+)/$', views.index, name='index')跨度>
    • 通过索引视图传递url
    • 您能否编辑您的问题以包含您的home.html 的相关部分?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多