我试图重定向到一个页面,我打算在创建一个页面之后将其作为对象的主页实现.
下面是我的views.py的相应部分
new_station_object.save()
return HttpResponseRedirect(reverse("home_station",
kwargs={'pk': new_station_object.id}
))
class StationHome(View):
def get(self, request):
return HttpResponse("Created :)")
Run Code Online (Sandbox Code Playgroud)
和我的urls.py的相应部分;
url(r'^station/(?P<pk>\d+)$', StationHome.as_view(), name='home_station'),
Run Code Online (Sandbox Code Playgroud)
但我得到了上述错误;
TypeError at /station/2
get() got an unexpected keyword argument 'pk'
Run Code Online (Sandbox Code Playgroud)
有人请帮帮我.
再会!
所以去我的问题,
我有一个带有一些链接的模板,我想断言它们确实存在于我的页面中。
我的 html 部分,
<section>
<p>Welcome to open radio. We help you get on air!</p>
<p><a href="{% url 'userlogin' %}">Login</a></p>
<p><a href="{% url 'liststations' %}">View all our stations</a></p>
<p><a href="{% url 'userregistration' %}">SignUp!</a></p>
</section>
Run Code Online (Sandbox Code Playgroud)
我现在的测试,
response = self.client.get(reverse("home"))
assert reverse("userlogin") in response.content
assert reverse("liststations") in response.content
assert reverse("userregistration") in response.content
Run Code Online (Sandbox Code Playgroud)
我的测试通过了,我明白我并不是真正为这里的链接断言,而是为 URL 字符串断言。我如何专门测试链接?
我正在尝试从Django中的表单发送DELETE请求,从jQuery获取帮助,请参阅下面的链接;
https://baxeico.wordpress.com/2014/06/25/put-and-delete-http-requests-with-django-and-jquery/
我所拥有的是以下脚本;
<script src="jquery-1.11.3.js"></script>
<script>
$(document).ready(function(){
$.ajax({
id : 'delete',
headers : {'X_METHODOVERRIDE': 'DELETE'}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
(我打算)以下列形式行事;
<form method="post" id="delete" name="delete" action="">
{% csrf_token %}
<input type="submit" value="Delete" />
</form>
Run Code Online (Sandbox Code Playgroud)
以及中间件;
from django.http import QueryDict
class HttpPostTunnelingMiddleware(object):
def process_request(self, request):
if request.META.has_key('HTTP_X_METHODOVERRIDE'):
http_method = request.META['HTTP_X_METHODOVERRIDE']
if http_method.lower() == 'put':
request.method = 'PUT'
request.META['REQUEST_METHOD'] = 'PUT'
request.PUT = QueryDict(request.body)
if http_method.lower() == 'delete':
request.method = 'DELETE'
request.META['REQUEST_METHOD'] = 'DELETE'
request.DELETE = QueryDict(request.body)
return None
Run Code Online (Sandbox Code Playgroud)
我把它添加到我的settings.py中的MIDDLEWARE_CLASSES列表中;
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware', …Run Code Online (Sandbox Code Playgroud) 我有以下表格;
class RemoveMemberForm(Form):
member = forms.ModelChoiceField(queryset="",
empty_label='Choose a Member',
)
Run Code Online (Sandbox Code Playgroud)
以下观点;
class StationHome(View):
def get(self, request, pk):
station = Station.objects.get(pk=pk)
channels = Channel.objects.filter(station=station)
members = station.members.all()
form1 = AddMemberForm()
form2 = RemoveMemberForm()
form2.fields['member'].queryset = station.members.all()
return render(request,
"home_station.html",
{"station":station,
"form1":form1,
"form2":form2,
"channels":channels,
"members":members,
},
)
class MemberRemove(View):
def post(self, request, pk):
form = RemoveMemberForm(request.POST)
if form.is_valid():
Station.objects.get(pk=pk).members.remove(
form.cleaned_data['member']
)
return HttpResponseRedirect(reverse("home_station",
kwargs={'pk':pk},
)
)
Run Code Online (Sandbox Code Playgroud)
我要做的是让第二个视图删除所选成员并重定向到第一个视图.但相反,我坚持AttributeError at /station/2/removemember,对应于第二个视图的URL,'str' object has no attribute 'model'